PHP类def:单独的访问器/ mutator或带有switch()的__set()?

前端之家收集整理的这篇文章主要介绍了PHP类def:单独的访问器/ mutator或带有switch()的__set()?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
在定义 PHP类时,哪个是首选/最佳实践?我有什么关键差异吗?

看起来编写一个__set()魔术方法可以更干净,更简洁,更方便,并在其中放置一个switch()构造,其中包含我想允许访问的所有私有成员的案例.它不会从类内部自动调用,但是再也不会setFoo(),所以如果我想在内部使用accessor / mutator,我必须以任何方式显式调用方法.

另一个区别是,在类外部的代码中,我总是可以以与$obj-> foo相同的方式访问成员变量,无论是公共(直接)还是私有(使用__set()),而不是使用许多单独的方法.

我想这主要归功于美学选择.例如,如果我有购买的地址数据,我不希望有16个或更多单独的访问者方法,仅用于名字,姓氏,地址1,地址2,城市,州等,每个用于运送和计费数据.

我忽略了哪些关键差异? (一个复杂的IDE可能拒绝在课外自动完成一个成员名称,因为它被标记为私有?)我几乎回答了我自己的原始问题吗?提前感谢您的意见.

与您希望从外部访问的每个成员一起使用各个访问者.我试过两个并发现这些原因使用访问器:

>无论您使用什么来记录您的API(doxygen / PHPdoc / Zend),生成的文档都不会显示可通过魔术函数访问的成员.>您可以记录访问者.你真的应该能够在文档中添加这样的行:“重要!这个函数连接到数据库,它会非常慢,如果可以,请使用otherFunction().”>任何人都可以轻松看到访问者的实现.我不想深入研究200行魔术函数的细节,以检查访问者除了设置/获取值之外是否做了什么(这就是为什么我们最终会编写访问器.)>您已经提到过IDE的自动完成功能.> __get()函数有一个明确定义的函数头,因此你将无法创建返回引用的getter(例如,在使用数组时非常好,即$numbers =& $object- > getNumbers(); $numbers [] = 4; – 如果没有引用,则需要再次调用setter.)

猜你在找的PHP相关文章