看起来编写一个__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.)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。