PHP 魔术方法使用中的一个报错,or 可能是PHP的一个bug

作者: JONE 分类: PHP/MySQL 发布时间: 2018-07-26 13:00
<?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

4条评论
  • 沈唁志

    2018年7月28日 下午5:36

    __set的问题

    1. JONE

      2018年7月28日 下午8:27

      那这就是php的bug咯?

      1. 沈唁志

        2018年7月29日 下午1:01

        是这么赋值操作没用,不是谁的锅

  • 沈唁志

    2018年7月29日 下午1:25

    这个匿名类在;之后就没有了,赋值本来就没有意义,而且实例化以后也是临时的。没赋值调用的__get,赋值调用的set。你实例化给了变量所以没问题,我是这么理解的

发表评论

电子邮件地址不会被公开。 必填项已用*标注