是否有设置许多对象属性的简写方法?

时间:2012-01-05 18:01:39

标签: php

因为我很懒,我想知道PHP是否有简写方法来设置这样的属性......

with $person_object {
    ->first_name = 'John';
    ->last_name = 'Smith';
    ->email = 'spam_me@this-place.com';
}

有这样的事吗?或者,是否有一种懒惰的方式来设置属性而无需一遍又一遍地键入$person_object

4 个答案:

答案 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
    }
}

}