Re: [請益] 物件中的物件表示法

看板PHP作者 (皮皮快跑)時間12年前 (2013/03/18 12:38), 編輯推噓6(603)
留言9則, 8人參與, 最新討論串2/5 (看更多)
※ 引述《BBSealion (海獅)》之銘言: : 最近在使用PHP寫OO : 但有一點小疑惑 : 我開了兩個class : Class A{ : var $a = 0; : var $aa = 0; : } : Class B{ : var $b = 0; : var $bb = new A; : } : 黃色那行就不讓我過了 : 我其實可以先設他為0,之後再塞一個A物件給他行得通 : 不過我想在Class更明確的表示他必須要吃一個A物件 : 想請教一下這個概念要怎麼寫比較好呢? class aaa{ public $a = 123; public $aa = 456; } class b{ public $obj_a; function __construct(){ $this->set_a_object(new aaa); } function set_a_object(aaa $obj_a){ $this->obj_a = $obj_a; } } $b = new b; echo $b->obj_a->a.'<br>'; echo $b->obj_a->aa.'<br>'; 注意一下,這邊是不走直接建構式。 其實改這樣是ok的: function __construct(aaa $obj_a){ $this->obj_a = $obj_a; } 但差異是一個你在跑主程式時要自己去new。 一個是物件就直接幫你new。 主要差異在那裡? 差異在於如果你載進來的class不叫aaa這個程式就會異常。 你應該是要強制規範進來的物件一定要叫aaa吧。 另外追加補充一點就是: 其實這算是一種指定類別或介面規範。 因為我沒有定義interface而是直接定義class名稱。 所以是強制要求實作class的名稱為aaa。 但如果你的要求是「只要物件本身具備介面要做實作的功能」 就可以改成這樣: interface myaction{ function run(); } class aaa implements myaction{ function run(){ echo 'run'; } } class b{ public $myobj; function __construct(myaction $myobj){ $this->myobj = $myobj; } } $b = new b(new aaa()); $b->myobj->run(); 上面這種情形比較特別在於 你new的東西不一定要是aaa。 但是你的aaa比須遵從myaction的介面規範。 只要任何人都去implements myaction 並且都有實作myaction制定的方法。 那就可以正常執行。 (因為已經定義介面是myaction,故意不去implements myaction的話就會視為錯誤, 而implements myaction之後故意不實做run也會是錯誤) 今日更新(3/19): 1.修正錯別語法應為:implements才對。(少了s) 2.更正內容為: 其實這算是一種指定類別或介面規範。 因為我沒有定義interface而是直接定義class名稱。 (原文:其這算是一種介面規範。因為我沒有定義interface。) -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 114.43.157.62

03/18 18:04, , 1F
03/18 18:04, 1F

03/18 18:28, , 2F
大推
03/18 18:28, 2F

03/18 23:43, , 3F
推! 這個超清楚 最後一個寫obj-c時常用到原來PHP也OK
03/18 23:43, 3F

03/19 11:15, , 4F
簡單明瞭
03/19 11:15, 4F

03/19 13:13, , 5F
指定 class 應該和介面規範無關吧 :P
03/19 13:13, 5F

03/19 13:14, , 6F
不過還是推一個熱心解答
03/19 13:14, 6F

03/19 13:27, , 7F
喔!因為我看錯error code,他是寫instance,不是interface
03/19 13:27, 7F
※ 編輯: tkdmaf 來自: 220.136.50.24 (03/19 13:33)

03/21 11:20, , 8F
精華阿~~
03/21 11:20, 8F

03/22 10:57, , 9F
不M對不起麥當勞ㄚ
03/22 10:57, 9F
文章代碼(AID): #1HHffAj8 (PHP)
討論串 (同標題文章)
文章代碼(AID): #1HHffAj8 (PHP)