2014-02-19 25 views
0

我曾嘗試在警予框架工作CController增加設置功能,並嘗試在控制器的對象添加屬性,但它給錯誤在基類中使用魔法__set()函數的

可我的用戶羣類的__set功能設置屬性的一個實例。

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

} 
Class SubClass2 extends Base { 

} 

我創建SubClass1或SubClass2的實例,我想動態添加屬性。可能嗎。

+1

如果屬性只有在子類中保護和定義,我認爲這是可能的。 – rodrigorigotti

+2

你試過了嗎?這是一個Q + A網站,不要忘記,而不是一個真正的PHP解釋器。 – Clive

+0

我曾嘗試在yii框架中添加CController中的set函數,並嘗試在控制器的對象中添加屬性,但它給出了錯誤,這就是爲什麼我問。 @Clive –

回答

0

是的,你可以把你的神奇功能的類結構。即使你沒有在類文件中定義,通常也會調用魔術函數。

所以,如果你不在你的類文件中創建__set(),它不會影響太多。但是,如果你想在設置對象下做一些額外的事情,那麼它會有幫助。

另外,__set()函數需要兩個參數$ name和$ value。請參考以下網址,

__set() magic function

問候

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; 

將輸出:

設置巴茲:巴茲

獲得巴茲

巴茲

-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; 

    } 
    } 
+0

只需將代碼發送到垃圾郵件中就沒有什麼幫助。 – garoevans

相關問題