PHP 魔术方法使用中的一个报错,or 可能是PHP的一个bug
<?php class test { public function __set($k,$v) { echo '$k->'.$k.'<br>'; echo '$v->'.$v.'<br>'; } public function __get($k) { echo '$k->'.$k.'<br>'; } } $b = new test(); (new test())->a; (new test())->a=1;
报错信息:Fatal error: Cannot use temporary expression in write context in D:\phpstudy\WWW\index.php on line 16
PHP环境 PHP 7.0.12-Nts
但是把以上代码稍微改一下,执行就正常了
<?php class test { public function __set($k,$v) { echo '$k->'.$k.'<br>'; echo '$v->'.$v.'<br>'; } public function __get($k) { echo '$k->'.$k.'<br>'; } } $b = new test(); (new test())->a; $b ->a=1;
执行正常 结果如下
$k->a
$k->a
$v->1
沈唁志
2018年7月28日 下午5:36
__set的问题
JONE
2018年7月28日 下午8:27
那这就是php的bug咯?
沈唁志
2018年7月29日 下午1:01
是这么赋值操作没用,不是谁的锅
沈唁志
2018年7月29日 下午1:25
这个匿名类在;之后就没有了,赋值本来就没有意义,而且实例化以后也是临时的。没赋值调用的__get,赋值调用的set。你实例化给了变量所以没问题,我是这么理解的