2015-09-14 45 views
0

我要轉讓的祖先(A)以後代(B)型變量,並呼籲在PHP祖先後代的方法,但我不能讓它工作。如何分配祖先後代的PHP類 - 類型鑄造

class B extends A{ 
    public function c(){ echo 'B.c'} 
} 

我曾嘗試:

  1. 重寫B構造

    class B extends A{ 
        public function __construct($parent) 
        { 
         $this = $parent; 
        } 
        ... 
    } 
    

$this不能被重寫,所以這是一個不走。

  • 這件事我忘了是怎麼回事叫

    function d(B $b){ 
        $b = new A(); 
        b.c(); 
    } 
    
  • 顯式類型轉換

    function d(){ 
        $b = (B) new A(); 
        b.c(); 
    } 
    

    或者

    function d(){ 
        $b = settype(new A(),'B'); 
        b.c() 
    } 
    
  • 這不起作用或者settype只允許某些類型而不是其他用戶定義的對象類型。

    +0

    http://php.net/manual/en/keyword.extends.php看例子:) – Fky

    +0

    **在PHP祖先通話後代方法** ???? –

    回答

    1

    Allinformationseen暗示沒有乾淨的方式來修改對象的類型。 (PHP只是假貨某些種類的鑄件,例如有一個(int)運營商,但類型int未知本身。)

    我發現的方法有兩種類型:

    1. 序列化你的對象,破解字符串以修改其類型,反序列化。 (見herehere - 等同)。或

    2. 實例化一個新對象並複製其所有屬性。 (見here

    我會用第二種方法去因爲你似乎與已知的物體層次來處理:

    class B extends A { 
        public function __construct(A $object) { 
         foreach($object as $property => $value) { 
          $this->$property = $value; 
         } 
        } 
    } 
    

    如果你有過創建原始對象的一些控制,請考慮實施工廠模式,以便從一開始就創建類型B