当定义一个PHP类,这是优选的/最佳做法? 是否有我俯瞰任何主要区别?
这似乎是它可以更干净,简洁,方便写一个__set()
魔术方法,把一个switch()
构建它的情况下为所有的私有成员,而我想允许进入。 它不会从类中自动地叫,但随后又都不愿setFoo()
所以如果我想在内部使用的访问/突变,我必须显式调用方法无论哪种方式。
另一个区别是,在类外的代码,我随时可以访问成员以同样的方式作为瓦尔$obj->foo
,无论是公共的(直接)或私有的(使用__set()
与使用许多不同的方法。
我想这主要是归结到一个审美的选择。 举例来说,如果我有一个购买地址数据,我不希望有16种或更多的只是姓,名,地址1,地址,城市,州等不同的存取方法每个运输和计费数据。
是否有我忽视任何主要区别? (可能在复杂的IDE拒绝自动完成的成员名称的类之外,因为它被标记为私?)我有相当多回答我自己原来的问题? 在此先感谢您的输入。
去为每个单独的访问器,并且希望能够从外部访问的每一个成员。 我曾经尝试都发现这些理由使用存取:
- 不管你用它来记录您的API(doxygen的/ PHPDoc的/ Zend的),生成的文档不会显示是通过神奇的功能访问的成员。
- 您可以记录访问者。 你真的应该能够把这样一行文档中:“重要事项此功能连接到数据库,这将是很慢,如果你可以使用otherFunction()。”
- 访问者的执行是任何人都容易看到。 我不想挖成200系魔法功能的详细检查,如果访问做任何事情,除了设置/获取的值(这就是为什么我们写存取毕竟)。
- 你已经提到的IDE的自动完成。
- 该__get()函数有一个明确定义的函数头,所以你将无法创建返回引用干将,例如(使用数组时,这是真正伟大的,即
$numbers = &$object->getNumbers(); $numbers[] = 4;
-如果没有参考,则需要再次调用的setter)
我看到的最大的区别是PHPDoc的:
- 使用
__set
,你将不能够产生PHPDoc的每个访问 - 正在使用的现代人PHPDoc的IDE,这也意味着,如果你使用魔法的方法(使用你不会得到类型提示,也没有代码完成
@property
可能会有所帮助,但是,在这一点上)。
Personnaly,我会定义存取自己去,即使这意味着写更多的代码:
- 与PHPDoc的没问题
- 你可以使用任何参数和返回你想要的类型
- 您明确指出可以使用的方法
- 更容易使用特定的代码为每个proerty,不具有一个很长的
__set
方法。
另外,我想从设置里面的类属性时使用这些访问方法:它意味着多一点的代码,是的 - 但它也意味着通过特定的代码去(如代码检查一些东西),它们包含。
最后,如果你只是用一些属性来存储数据,而无需定义任何特定的行为,为什么不将它们公开为公共,并允许用户直接访问那些?