※ 發信站: 批踢踢實業坊(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
我有三個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();
但語法錯誤
請各位先進指導指導 甘溫~
--