在基类中使用magic __set()函数

时间:2014-02-19 12:57:45

标签: php yii

我在yii框架中尝试在CController中添加set函数并尝试在控制器的对象中添加属性但是它给出了错误

我可以使用基类的__set函数来设置实例的属性。

 Class  Base {
     public function __set() {
         $this->$name = $value;
     }
}
Class  SubClass1 extends Base{

}
Class  SubClass2 extends Base {

}

我创建SubClass1或SubClass2的实例,我想动态添加属性。可能吗。

4 个答案:

答案 0 :(得分:0)

是的,除非财产是私人的

,否则你可以

答案 1 :(得分:0)

是的,你可以将你的魔法功能放在你的班级结构中。即使您没有在类文件中定义,Magic函数也会正常调用。

因此,如果您不在类文件中创建__set(),则不会对其产生太大影响。但是,如果你想在对象下设置一些额外的东西,那么它会有所帮助。

另外,__ set()函数需要两个参数,$ name和$ value。请参考以下网址

__set() magic function

此致

答案 2 :(得分:0)

您确实可以,以下内容将证明:

<?php
class Foo
{
    private $vars = array();

    public function __set($name, $value)
    {
        echo "Setting $name: $value<br />";
        $this->vars[$name] = $value;
    }

    public function __get($name)
    {
        echo "Getting $name<br />";
        return isset($this->vars[$name]) ? $this->vars[$name] : null;
    }
}

class Bar extends Foo {}

$bar = new Bar();

$bar->baz = 'baz';
echo $bar->baz;

将输出:

  

设置baz:baz

     

获取baz

     

巴兹

答案 3 :(得分:-2)

     class Base {
     protected $data;
     public function __construct() {
     $this->someMethodBaseClass();
     }
     protected function someMethodBaseClass() {
     $this->data = 123456;
     }
     }



    class subclass1 extends Base{
    public function __construct() {
    parent::__construct();
    }
    public function getData() {
    return $this->data;  

    }
  }