PHP 板


LINE

看板 PHP  RSS
※ 引述《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
1F:推 MOONRAKER:讚 03/18 18:04
2F:推 j87b0003:大推 03/18 18:28
3F:推 BBSealion:推! 這個超清楚 最後一個寫obj-c時常用到原來PHP也OK 03/18 23:43
4F:推 junktw:簡單明瞭 03/19 11:15
5F:→ gpmm:指定 class 應該和介面規範無關吧 :P 03/19 13:13
6F:推 gpmm:不過還是推一個熱心解答 03/19 13:14
7F:→ tkdmaf:喔!因為我看錯error code,他是寫instance,不是interface 03/19 13:27
※ 編輯: tkdmaf 來自: 220.136.50.24 (03/19 13:33)
8F:推 dardar923:精華阿~~ 03/21 11:20
9F:→ yanli2:不M對不起麥當勞ㄚ 03/22 10:57







like.gif 您可能會有興趣的文章
icon.png[問題/行為] 貓晚上進房間會不會有憋尿問題
icon.pngRe: [閒聊] 選了錯誤的女孩成為魔法少女 XDDDDDDDDDD
icon.png[正妹] 瑞典 一張
icon.png[心得] EMS高領長版毛衣.墨小樓MC1002
icon.png[分享] 丹龍隔熱紙GE55+33+22
icon.png[問題] 清洗洗衣機
icon.png[尋物] 窗台下的空間
icon.png[閒聊] 双極の女神1 木魔爵
icon.png[售車] 新竹 1997 march 1297cc 白色 四門
icon.png[討論] 能從照片感受到攝影者心情嗎
icon.png[狂賀] 賀賀賀賀 賀!島村卯月!總選舉NO.1
icon.png[難過] 羨慕白皮膚的女生
icon.png閱讀文章
icon.png[黑特]
icon.png[問題] SBK S1安裝於安全帽位置
icon.png[分享] 舊woo100絕版開箱!!
icon.pngRe: [無言] 關於小包衛生紙
icon.png[開箱] E5-2683V3 RX480Strix 快睿C1 簡單測試
icon.png[心得] 蒼の海賊龍 地獄 執行者16PT
icon.png[售車] 1999年Virage iO 1.8EXi
icon.png[心得] 挑戰33 LV10 獅子座pt solo
icon.png[閒聊] 手把手教你不被桶之新手主購教學
icon.png[分享] Civic Type R 量產版官方照無預警流出
icon.png[售車] Golf 4 2.0 銀色 自排
icon.png[出售] Graco提籃汽座(有底座)2000元誠可議
icon.png[問題] 請問補牙材質掉了還能再補嗎?(台中半年內
icon.png[問題] 44th 單曲 生寫竟然都給重複的啊啊!
icon.png[心得] 華南紅卡/icash 核卡
icon.png[問題] 拔牙矯正這樣正常嗎
icon.png[贈送] 老莫高業 初業 102年版
icon.png[情報] 三大行動支付 本季掀戰火
icon.png[寶寶] 博客來Amos水蠟筆5/1特價五折
icon.pngRe: [心得] 新鮮人一些面試分享
icon.png[心得] 蒼の海賊龍 地獄 麒麟25PT
icon.pngRe: [閒聊] (君の名は。雷慎入) 君名二創漫畫翻譯
icon.pngRe: [閒聊] OGN中場影片:失蹤人口局 (英文字幕)
icon.png[問題] 台灣大哥大4G訊號差
icon.png[出售] [全國]全新千尋侘草LED燈, 水草

請輸入看板名稱,例如:e-shopping站內搜尋

TOP