检查是否使用变量作为指针设置了公共对象属性


Check if public object property is set with variable as pointer

Ola!

所以我得到了一个$_POST,看起来像:

Array
(
    [name] => FooBar
    [sobject] => tbl_character
    [id] => 102
)

像这样的"SmartObject">

SmartObject Object
(
    [_settings] => Array
        (
            [table] => tbl_character
            [ignores] => Array
                (
                    [0] => leaderid
                    [1] => typeid
                    [2] => senderid
                    [3] => recieverid
                    [4] => imageid
                    [5] => fileid
                    [6] => professionid
                    [7] => id
                )
            [prefix] => tbl_
        )
    [id] => 102
    [worldid] => 
    [accountid] => 110
    [zoneid] => 
    [raceid] => 1
    [imageid] => 
    [name] => asd
    ... blabla more data
)

我想做的是循环遍历$_POST,并检查密钥是否与SmartObject上的任何公共集属性匹配,如下所示:

foreach($_POST as $key => $value) {
  if(isset($object->{$key})) {
    $object->{$key} = $value;
   }
}

当一个值存在时(例如,对于id(,isset会触发并返回true,但当值不存在时,isset不会返回true。

empty()检查是否设置了值。

isset()应该检查"变量"或"属性"是否存在,而不一定设置为任何值,对吧?

我相信这个代码在一年前对我来说很好,但现在if语句不会在name上触发。我做错什么了吗?php的基本原理改变了吗?

怎么样(如果您使用的是PHP>=5.1(:

foreach($_POST as $key => $value) {
    if (property_exists($object, $key)) {
        $object->$key = $value;
    }
}

以下是文档:http://www.php.net/manual/en/function.property-exists.php

来自官方文件:

注意:与isset((相反,property_exists((即使在该属性的值为NULL。