精華區beta PHP 關於我們 聯絡資訊
我有三個class A,B,BB BB繼承B 然後A裡面有一個method getB() 會回傳一個B的instance 也就是 class A{ private $b; public function __construct(){ $this->b= new B(); } public function getB(){ return $this->b; } } 假設$a = new A(); 請問我可以將 $a->getB()回傳的物件 轉換成BB的物件嗎? 我異想天開的試過$bb= (BB) $a->getB(); 但語法錯誤 請各位先進指導指導 甘溫~ -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 210.202.81.67 > -------------------------------------------------------------------------- < 作者: gpmm (銀色) 看板: PHP 標題: Re: [請益] 轉換回傳物件 時間: Fri Jan 11 12:33:24 2013 ※ 引述《kenit (充實自己實現夢想)》之銘言: : 我有三個class : A,B,BB : BB繼承B : 然後A裡面有一個method getB() 會回傳一個B的instance : 也就是 : class A{ : private $b; : public function __construct(){ : $this->b= new B(); : } : public function getB(){ : return $this->b; : } : } : 假設$a = new A(); : 請問我可以將 $a->getB()回傳的物件 : 轉換成BB的物件嗎? : 我異想天開的試過$bb= (BB) $a->getB(); : 但語法錯誤 : 請各位先進指導指導 甘溫~ 呃,我試著簡化一下你的問題, 你的意思是,如果 class BB extends from B 能不能將實體化的 object B,轉型成 object BB? 這個嘛…在物件導向裡(先撇開是不是 PHP), 一種物件實際上沒辦法無痕轉為另一種物件, 你可以透過 interface 來讓兩個物件具有共同的存取介面, 也就是在特定情況下,這兩個實體物件可以算是具有相同能力, 或著由繼承得來,兩個物件(有血緣關係的)也應該會有具有相同能力, 那麼在特定情況下,兩者依然可以被視為同一種存取, (也就是 upcasting / downcasting) 但實際上這都不是真正的把 B 變成 BB, 畢竟是兩種不同的規格,在沒有一個完整對應規範的情況下,應該是無法做到這點, 如果你有這種真正的轉型需求, 我能想到的只有寫函式來手動轉了 :P -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 175.180.111.33 ※ 編輯: gpmm 來自: 175.180.111.33 (01/11 12:34) > -------------------------------------------------------------------------- < 作者: tkdmaf (皮皮快跑) 看板: PHP 標題: Re: [請益] 轉換回傳物件 時間: Fri Jan 11 15:02:11 2013 ※ 引述《kenit (充實自己實現夢想)》之銘言: : 我有三個class : A,B,BB : BB繼承B : 然後A裡面有一個method getB() 會回傳一個B的instance : 也就是 : class A{ : private $b; : public function __construct(){ : $this->b= new B(); : } : public function getB(){ : return $this->b; : } : } : 假設$a = new A(); : 請問我可以將 $a->getB()回傳的物件 : 轉換成BB的物件嗎? : 我異想天開的試過$bb= (BB) $a->getB(); : 但語法錯誤 : 請各位先進指導指導 甘溫~ class A{ private $b; public function __construct($object){ $this->b= $object; } public function getB(){ return $this->b; } } $a = new A(new BB); $bb = $a->getB(); -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 220.136.34.247