2014-10-21 24 views
1

我試圖重新定義特徵中魔法__set的行爲。當我還想從特徵訪問父類定製__set函數時出現問題。直到我也需要使用主類__set方法,因爲它在做一些其他的東西與變量集從特質訪問父級魔法方法

trait TestingTrait { 


    public function __set($key, $value) 
    { 
     // Some stuff... 

     parent::__set($key, $value); 
     // self::__set($key, $value); 
    } 

} 

class TestingClass { 

    use TestingTrait; 

} 

$var = new TestingClass(); 
$var->value = 'some value'; 

一切都運行完美。我試過self,但它進入了一個無限循環。有沒有辦法訪問主類?

回答

2

你應該使用$this->這樣的:

<?php 

trait TestingTrait { 


    public function __set($key, $value) 
    { 
     // Some stuff... 
     $this->$key = 'proof that it is going through here: ' . $value; 
    } 

} 

class TestingClass { 

    use TestingTrait; 

} 

$var = new TestingClass(); 
$var->value = 'some value'; 

echo $var->value; 

Output

proof that it is going through here: some value 
+0

它實際上工作,但它不會調用主類*** __設置***方法,只是設置屬性。 – 2014-10-22 00:19:15

+0

不。我強調它確實會調用'__set',因爲它預先設置了值'證明它正在經過這裏:'。 – 2014-10-22 00:20:16

0

我不知道特質的行爲就好像它是代碼的一部分字面上複製/粘貼進入課堂。

PHP: Traits (Example 2)

這是不可能通過父訪問主類,因爲它實際上沒有父從延伸。