因为我很懒,我想知道PHP是否有简写方法来设置这样的属性......
with $person_object {
->first_name = 'John';
->last_name = 'Smith';
->email = 'spam_me@this-place.com';
}
有这样的事吗?或者,是否有一种懒惰的方式来设置属性而无需一遍又一遍地键入$person_object
?
答案 0 :(得分:8)
您可以在Person
课程中实现类似于构建器模式的内容。该方法涉及在每个setter调用结束时返回$this
。
$person
->set_first_name('John')
->set_last_name('Smith')
->set_email('spam_me@this-place.com');
在你班上......
class Person {
private $first_name;
...
public function set_first_name($first_name) {
$this->first_name = $first_name;
return $this;
}
...
}
答案 1 :(得分:2)
没有
不,没有。
答案 2 :(得分:2)
通用装饰功能可以为您做到这一点:
function decorate( $object, $data )
{
foreach ( $data as $key => $value )
{
$object->$key = $value;
}
}
decorate( $person_object, array( 'first_name' => 'John', 'last_name' => 'Smith' ) );
我可能犯了一些错误,自从我编写PHP代码以来已经有一段时间了,这是未经测试的
答案 3 :(得分:1)
不,我不这么认为。然而你可以做这样的事情:
class Person {
function __call($method, $args) {
if (substr($method, 0, 3) == set) {
$var = substr($method, 3, strlen($method)-3);
$this->$var = $args[0];
} else {
//throw exception
}
}
}