PHP 板


LINE

看板 PHP  RSS
最近刚学到trait的用法,看了php.net和很多教学後已经对他有初步认识 不过还是有一些疑问想要请教... 我假设有一段程式码是使用trait的,像这样: trait tFoo { private function foo() { //... } } class Bar1 { use tFoo; public function bar() { $this->foo(); //... } } 而有另外一段有相同作用的程式码,像这样: class Foo { //用处与tFoo相同 public function foo() { //... } } class Bar2 { //用处与Bar1相同 private $foo; public function bar() { $this->foo = new Foo(); $this->foo->foo(); //... } } 想请问一下各位大大,以程式维护和易读性的角度来看,这两种做法的差别在哪呢? 还是以其他角度来看,有问题是我没有注意到的呢? --



※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 36.238.147.185
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/PHP/M.1534210845.A.39D.html
1F:推 MoMoShota: trait 视为 class 的语法糖,在运行时不耗额外记忆体 08/14 10:02
2F:→ MoMoShota: 如果要解耦合,还是用 class 的方式会比较好 08/14 10:06
3F:→ MOONRAKER: 看过一些专案滥用trait 要借用什麽功能就require/use 08/14 11:14
4F:→ MOONRAKER: 造成controller/model/library角色不分 违反MVC原则 08/14 11:15
5F:→ MOONRAKER: 除非严格遵守各trait间的从属关系 否则新手最好别用来 08/14 11:17
6F:→ MOONRAKER: 偷懒 用起来太爽的工具不利於学习 08/14 11:17
7F:推 molopo: 不用new直接用的class 08/14 19:24
8F:→ molopo: 自己用在权限 08/14 19:24
9F:推 banqhsia: trait的实作是copy&paste到该parent底下,实际上可以想 08/18 12:47
10F:→ banqhsia: 像成「有实作」的interface。比如有一个trait叫作 08/18 12:48
11F:→ banqhsia: CanBite,这样可以给两种不同的狗使用。而不会因为定义 08/18 12:48
12F:→ banqhsia: 了一个CanBiteInterface,就强迫两只狗都要写一模一样 08/18 12:49
13F:→ banqhsia: 的 bite() 方法。 08/18 12:49
14F:→ banqhsia: 但要记住,trait 不单单只是「把你的code换另一个档案放 08/18 12:49
15F:→ banqhsia: 」「看起来比较乾净」而已,还要考虑到各类别的职责, 08/18 12:50
16F:→ banqhsia: 因为复制过来的trait就算是该类别的一部分。如果你做 08/18 12:51
17F:→ banqhsia: 太多事情,又需要一些属性,那你还是写成class会比较 08/18 12:51
18F:→ banqhsia: 好。 08/18 12:51
19F:推 banqhsia: 还有,因为你在 Bar2,需要 Foo 这个类别,所以你直接 08/18 12:53
20F:→ banqhsia: new 一个 Foo 然後呼叫他的方法,这样会直接对 Foo 产 08/18 12:53
21F:→ banqhsia: 生依赖,有 Bar2 的地方就一定要有 Foo,两个耦合程度 08/18 12:53
22F:→ banqhsia: 会过高,在设计类别的时候可以思考一下各 class 的职 08/18 12:53
23F:→ banqhsia: 责,免得容易写出万能类别,或是万能 trait。 08/18 12:53







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灯, 水草

请输入看板名称,例如:WOW站内搜寻

TOP