我正在重新格式化我的课程(见下文) - 我认为我错误地在我的 class 中设置了相同的可见性,而属性应该是私有的,并且在大多数情况下,getter / setter应该是公开的 .
要 grab 一个属性,我只需要$ path-> propertyname,但我注意到它更实用的有setter / getters . 如果我要实施吸气剂,我应该为每个 properties 制作一个,还是可以为整个 class 制作一个?所以例如说我想得到控制器名称......
public function getController( ) {
return $this->controller;
}
这将返回控制器私有 property ?拥有一个更通用的getter / setter甚至是一个为我设置和设置的混合方法是否常见?
这是类结构(只是属性/方法):
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
}
}
3 回答
在你的情况下有安装者和吸气剂是没有意义的 .
如果除了返回控制器之外你还要做任何事情,你不需要getter,因为如果在设置之后你没有对属性做任何事情,你就不需要setter .
如果你真的想要getter和setter,你可以对所有属性使用__get和__set魔术方法 . 但如果案件如上所述,这完全没有意义 .
看一下php中的重载:http://php.net/overload
有两种神奇的方法
__get()
和__set()
可能完全符合您的要求PHP对象有一些不错的magic methods(虽然我不使用所有这些因为它会让人感到困惑) . 您可能正在寻找的是__get()和__set() . 如果您选择将数据字段设为私有,则仍然需要重构所有代码(您应该这样做,以免您的其他代码错误地访问字段 . 这样做有助于使代码更好更容易保持 .
虽然,我通常会尝试为每个私有数据字段设置getter和setter,因为您可以轻松查看每个字段的任何验证 . 另外,我更像是Java开发人员,而不是PHP开发人员 .