__set()函数和__get()函数,为何无法被调用到呢?(几行代码)我不知为什么,__set()和__get()函数总是不能得到调用,这是为什么呢?这两个函数,何时会被调用到呢?
书上说,这两个函数是构造函数一样呀,不是显式调用的,是被间接调用的呀?<?php
class myclass
{
public $p1;
public $p2; function __get($name)
{
echo "get被调用<br/>";
return $this->$name;
} function __set($name,$value)
{
$this->$name=$value;
echo "set被调用<br/>";
}}$a=new myclass;
$a->p2="p2的初值";
$t="p1";//以下这句会调用 __set()函数吗?
$a->$t="p1的值";//以下这句,会调用 __get()函数吗?
echo $a->$t;echo "<br/>";
$t="p2";//以下这句,会调用 __get()函数吗?
echo $a->$t;?>

解决方案 »

  1.   


    我不明白,为何类中没有定义的变量,会调用 __set() __get() ,但是已有人变量,却不会调用呢?<?php
    class myclass
    {
    public $p1; function __get($name)
    {
    echo "get被调用<br/>";
    return $this->$name;
    } function __set($name,$value)
    {
    $this->$name=$value;
    echo "set被调用<br/>";
    }
    }$a=new myclass;//以下代码为何不会调用 __set() 呢?
    $a->p1="p1 value";
    echo $a->p1;
    echo "<br/>";//以下代码为何会调用 __set() 呢?
    $a->pnew="pnew value";
    echo $a->pnew;
    echo "<br/>";//以下代码为何会调用 __get()
    echo $a->pnewnew;
    ?>
      

  2.   

    Both method calls and member accesses can be overloaded via the __call, __get and __set methods. These methods will only be triggered when your object or inherited object doesn't contain the member or method you're trying to access.
      

  3.   

    http://blog.sina.com.cn/s/blog_4565cc770100bv2u.html
      

  4.   

    你的属性己经是 public 类型 了,不需要经过  get  set 都可以操作。怎么作调用  get set 魔术方法呢???把属性改为  private 
      

  5.   

    我也是菜鸟,我想是这样的我不知为什么,__set()和__get()函数总是不能得到调用,这是为什么呢?这两个函数,何时会被调用到呢?
    书上说,这两个函数是构造函数一样呀,不是显式调用的,是被间接调用的呀?<?php
    class myclass
    {
        public $p1;
        public $p2;    function __get($name)
        {
            echo "get被调用<br/>";
            return $this->$name;
        }    function __set($name,$value)
        {
            $this->$name=$value;
            echo "set被调用<br/>";
        }}$a=new myclass;
    $a->p2="p2的初值";
    $t="p1";//以下这句会调用 __set()函数吗?
    //这里我的理解是$temp=$a->$t;$temp="p1的值";
    $a->$t="p1的值";//以下这句,会调用 __get()函数吗?
    //这里应该调用
    echo $a->$t;echo "<br/>";
    $t="p2";//以下这句,会调用 __get()函数吗?
    //这里应该调用
    echo $a->$t;?>