为什么是9呢?不解

来源:2-10 PHP类和对象之对象的高级特性

五十岁的灰哥

2016-10-22 09:40

<?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回答

  • Jabin_
    2016-10-22 15:49:16
    已采纳

    $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 ,无关 。因为你给它重新赋值了。

    五十岁的灰哥

    非常感谢!

    2016-10-22 21:27:11

    共 1 条回复 >

  • 慕容7116597
    2016-10-22 16:20:40

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

  • 慕容7116597
    2016-10-22 16:20:34

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

  • 慕容7116597
    2016-10-22 16:19:32

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

PHP进阶篇

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

181734 学习 · 2575 问题

查看课程

相似问题