为了账号安全,请及时绑定邮箱和手机立即绑定

为什么是9呢?不解

<?php

class test{

    protected $a=9,$b=2,$c;

    public $d;

    function __set($n,$v){

        return $this->$n=$v+2;

    }

    function __get($name){

      return $this->$name+2;  

    }

}

 $a=new test();

 $a->b=5;

 echo $a->b;


正在回答

4 回答

$a->b=5  执行的是 __set($n,$v);  return $this->$n=$v+2;  这里a对象中的$b属性进行5+2=7的赋值。最后你输出echo $a->b 时执行__get($name)   return $this->$name+2;   又加了2  所以是9 。 这跟类中你自己定义的$b=2 ,无关 。因为你给它重新赋值了。

0 回复 有任何疑惑可以回复我~
#1

五十岁的灰哥 提问者

非常感谢!
2016-10-22 回复 有任何疑惑可以回复我~

你首先创了一个 类test()的对象$a,后又创了一个类test()中不存在的属性b,你要对b赋值并输出,所以你的类中有__set(),__get,两个函数,在对b赋值时就访问了赋值函数__set(),输出时既访问了读取函数__get..........个人看法,哈哈

0 回复 有任何疑惑可以回复我~

你首先创了一个 类test()的对象$a,后又创了一个类test()中不存在的属性b,你要对b赋值并输出,所以你的类中有__set(),__get,两个函数,在对b赋值时就访问了赋值函数__set(),输出时既访问了读取函数__get..........个人看法,哈哈

0 回复 有任何疑惑可以回复我~

你首先创了一个 类test()的对象$a,后又创了一个类test()中不存在的属性b,你要对b赋值并输出,所以你的类中有__set(),__get,两个函数,在对b赋值时就访问了赋值函数__set(),输出时既访问了读取函数__get..........个人看法,哈哈

0 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消
PHP进阶篇
  • 参与学习       181827    人
  • 解答问题       2577    个

轻松学习PHP中级课程,进行全面了解,用PHP快速开发网站程序

进入课程

为什么是9呢?不解

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信