请您检查php程序的属性,php – 检查属性是否存在于神奇的属性上

有很多关于这个问题的问题,特别是

this one,但这并没有帮助我.

在property_exists和isset之间有歧义,所以在提出我的问题之前,我要指出一点:

property_exists

所以在下面的例子中:

class testA

{

private $a = null;

}

class testB extends testA

{

}

$test = new testA();

echo var_dump(property_exists($test, 'a')); // true

// parent's private property becomes invisible for its child

$test = new testB();

echo var_dump(property_exists($test, 'a')); // false

isset

isset检查属性中是否存在值,如果值等于false,则检查是否未设置.

$var = null;

echo var_dump(isset($var)); // false

$var = '';

echo var_dump(isset($var)); // true

$var = false;

echo var_dump(isset($var)); // true

$var = 0;

echo var_dump(isset($var)); // true

$var = '0';

echo var_dump(isset($var)); // true

isset和property_exists在神奇添加的属性上的行为

一个属性可以存在一个空值,所以我不能使用__isset魔术方法知道一个属性是否存在.我也不能使用property_exists,因为使用魔法方法添加属性.

这是一个例子,但这只是一个例子,因为在我的应用程序中,魔术设置的属性被存储在对象外部.

class test {

private $data = array();

public function __get($key) {

echo "get $key\n";

return array_key_exists($key, $data) ? $data[$key] : null;

}

public function __set($key, $value) {

echo "set $key = $value\n";

$this->data[$key] = $value;

}

public function __isset($key) {

echo sprintf("isset $key ( returns %b )", isset($this->data[$key]));

return isset($this->data[$key]);

}

}

$test = new test();

$test->x = 42;

isset($test->x); // 1

$test->y = null;

isset($test->y); // 0

property_exists($test, 'y'); // 0

所以这里是我的问题:

Is there a magic method or an SPL interface to implement property_exist with magically added properties ?

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值