【发布时间】:2010-09-29 12:57:35
【问题描述】:
我知道在 PHP 中链接的好处,但假设我们有以下情况
$Mail = new MailClass("mail")
->SetFrom("X")
->SetTo("X")
->SetSubject("X")
->AddRecipient("X")
->AddRecipient("X")
->AddRecipient("X")
->AddRecipient("X")
->AddRecipient("X")
->AddRecipient("X")
->Send();
反复返回和重复使用对象是否有任何问题,例如速度或未能遵循最佳实践
如果您是 Fluent-Interface 的新手,也可以好好阅读:Martin Fowler on Fluent-Interfaces
我完全理解它没有必须这样编程,可以这样处理:
$Mail = new MailClass("mail");
$Mail->AddRecipien(
array(/*.....*/)
);
$Mail->SetFrom("X");
$Mail->SetTo("X");
$Mail->SetSubject("X");
$Mail->Send();
但是假设我有一个像这样的对象:
$Order = new Order()
->With(22,'TAL')
->With(38,'HPK')->Skippable()
->With(2,'LGV')
->Priority();
注意->With(38,'HPK')->Skippable(),这是此类编程 Pro 的完美示例
【问题讨论】:
-
类应该,IMO,验证它们的实例化参数和测试/控制它们的方法的参数。在我的邮件程序类中,is_valid_email 是类中的私有方法。
-
"->With(38,'HPK')->Skippable()" 情况不一定是问题,例如在这个场景中,您/班级可以知道 Skippable 适用于最后加上那个。
-
是的,但可读性因素大于编译此代码块的常规方法。这只是为了提高可读性
-
就个人而言,我不关心大多数代码中的流畅接口。它们在库中很有用,但就生产代码而言,我认为它们掩盖了太多可读的内容。要理解一个流畅的接口,你必须理解每个被调用方法的接口。
->With()是否返回Order对象?还是它返回另一个对象?如果您明确使用它,您会立即知道(因为您可以看到它分配给了什么)......所以我认为它实际上会损害可读性...... -
附带说明,PHP 中的方法名称通常以小写字母开头。
标签: php object fluent-interface chaining