属性访问器php,__get访问器上的PHP()空()

使用PHP 5.3当通过__get()过载函数获取的动态对象属性应用empty()时,我遇到了奇怪/非直观的行为。请考虑以下代码片段:

class Test {

protected $_data= array(

'id'=> 23,

'name'=> 'my string'

);

function __get($k) {

return $this->_data[$k];

}

}

$test= new Test();

var_dump("Accessing directly:");

var_dump($test->name);

var_dump($test->id);

var_dump(empty($test->name));

var_dump(empty($test->id));

var_dump("Accessing after variable assignment:");

$name= $test->name;

$id= $test->id;

var_dump($name);

var_dump($id);

var_dump(empty($name));

var_dump(empty($id));

?>

此功能的输出如下。比较第一和第二个结果集中的empty()检查的结果:

设置#1,意外结果:

string(19) "Accessing directly:"

string(9) "my string"

int(23)

bool(true)

bool(true)

期望Set#1返回与Set#2相同:

string(36) "Accessing after variable assignment:"

string(9) "my string"

int(23)

bool(false)

bool(false)

这真的是令人困惑和非直观的。对象属性输出非空字符串,但是empty()将它们视为空字符串。这里发生了什么?

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值