Setters/Getters, Visibility [ OOP ] in PHP
我正在重新格式化我的类(见下文)-我认为我犯了一个错误,就是在我的类中设置了具有相同可见性的所有内容,而属性实际上应该是私有的,并且getter/setter在大多数情况下应该是公共的。
要获取一个属性,我只需要执行$path->propertyname,但是我注意到使用setter/getter更为实用。如果要实现getter,应该为每个属性生成一个getter,还是可以为整个类生成一个getter?比如说我想得到控制器的名字…
1 2 3 | public function getController( ) { return $this->controller; } |
那会归还控制器的私有财产吗?有一个更通用的getter/setter或者甚至一个为我获取和设置的混合方法是常见的吗?
这是类结构(只是属性/方法):
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | class urlParser { public static $url = ''; public static $controller = ''; public static $baseController = ''; public static $urls = ''; public static $template = ''; public static $captures = ''; public static $contentXML = ''; function __construct( $urls ) { $this->urls = $urls; $this->baseController = $urls['default']; $this->get_url(); } public function get_url() { // sets following properties: // url, template, controller, contentXML, baseController } } |
在你的例子中有setter和getter是没有意义的。
如果除了返回控制器之外,您还需要做任何事情,那么您不需要getter,因为如果在设置属性之后不使用它,那么您不需要setter。
如果你真的想要getter和setter,你可以为你的所有属性使用get和set magic方法。但如果情况如我上面所描述的那样,那是完全没有意义的。
PHP对象有一些很好的魔术方法(尽管我并没有全部使用它们,因为它会变得混乱)。您可能要查找的是uuget()和u set()。如果您选择将数据字段设为私有(这样您就不必让其他代码错误地访问字段),那么仍然需要重构所有代码。这样做有助于使代码变得更好和更容易维护。
尽管如此,我通常尝试为每个私有数据字段设置getter和setter,因为您可以很容易地看到每个字段的任何验证。另外,我更像Java开发人员而不是PHP开发人员。
看看php中的重载:http://php.net/overload
有两种神奇的方法: