我想知道什么方法被认为是最佳实践,为什么?
拥有该功能,因此它会尝试抓取传入的内容。
class Test{
private $first = 'first';
private $second = 'second';
public function data($what){
return $this->{strtolower($what)};
}
}
或拥有一组固定的选项:
class Test{
private $first = 'first';
private $second = 'second';
public function data($what){
switch(strtolower($what)){
case 'first':
$value = $this->first;
break;
case 'second':
$value = $this->second;
break;
default:
$value = null;
}
return $value;
}
}
使用第一个选项意味着每次向类添加新成员时都不需要更改函数,但这也意味着我不能再拥有private
类成员。
使用第二个选项意味着我每次添加新成员时都需要更改函数,但这意味着我可以确保不会读取任何内容。
使用第一种方法,如果我想向特定成员添加额外的处理,我可以为这些成员添加一个if语句。
使用第二种方法,我可以在case语句中进行处理。
答案 0 :(得分:1)
当然,代码需要知道从对象中推断出什么是动态并不是更好,特定的是编写代码并不邋。这意味着你已经用你的大脑来思考这一行动的后果。
答案 1 :(得分:0)
我会选择第一个并利用魔术方法__get()
。
class Test {
private $first = 'first';
private $second = 'second';
public function data($what){
return $this->{strtolower($what)};
}
public function __get($what){
// This method is called whenever you're trying to access an inaccessible property.
return null;
}
}
$Test = new Test();
var_dump($Test->data('first')); // string: 'first'
var_dump($Test->data('abcde')); // null
当然,您也可以使用其他替代方法,例如定义可以从函数中检索哪些属性的数组。然后,在data()
函数中,只需检查所请求的属性是否可检索。否则返回null
class Test {
private $first = 'first';
private $second = 'second';
private $retrievable = array('first', 'second');
public function data($what)
{
if (in_array($what, $this->retrievable))
{
return $this->{strtolower($what)};
}
return null;
}
}
这样,您不必修改代码,只需编辑可检索项目数组。