PHP中的jQuery样式构造函数

时间:2011-01-13 14:48:14

标签: php oop class-constructors

有没有办法以与jQuery中类似的方式实例化一个新的PHP对象?我在谈论在创建对象时分配可变数量的参数。例如,我知道我可以做类似的事情:

...
//in my Class
__contruct($name, $height, $eye_colour, $car, $password) {
...
}

$p1 = new person("bob", "5'9", "Blue", "toyota", "password");

但是我想只设置其中一些。如下所示:

$p1 = new person({
    name: "bob",
    eyes: "blue"});

更多的是在jQuery和其他框架中如何完成它。这是内置于PHP?有办法吗?或者我应该避免它的原因?

4 个答案:

答案 0 :(得分:4)

执行此操作的最佳方法是使用数组:

class Sample
{
    private $first  = "default";
    private $second = "default";
    private $third  = "default";

    function __construct($params = array())
    {
         foreach($params as $key => $value)
         {
              if(isset($this->$key))
              {
                  $this->$key = $value; //Update
              }
         }
    }
}

然后用数组

构造
$data = array(
     'first' => "hello"
     //Etc
);
$Object = new Sample($data);

答案 1 :(得分:2)

class foo {
   function __construct($args) {
       foreach($args as $k => $v) $this->$k = $v;
       echo $this->name;
    }
 }

 new foo(array(
    'name' => 'John'
 ));

我能想到的最接近的。

如果您想要更加想要并且只想允许某些键,可以使用__set()(在php 5上仅

var $allowedKeys = array('name', 'age', 'hobby');
public function __set($k, $v) {
   if(in_array($k, $this->allowedKeys)) {
      $this->$k = $v;
   }
}

答案 2 :(得分:0)

get args不起作用,因为PHP只会看到一个参数被传递。

public __contruct($options) {
    $options = json_decode( $options );
    ....
    // list of properties with ternary operator to set default values if not in $options
    ....
}

查看json_decode()

答案 3 :(得分:-1)

我能想到的最接近的是使用array()extract()

...
//in your Class
__contruct($options = array()) {

    // default values
    $password = 'password';
    $name = 'Untitled 1';
    $eyes = '#353433';

    // extract the options
    extract ($options);

    // stuff
    ...

}

创建时。

$p1 = new person(array(
    'name' => "bob",
    'eyes' => "blue"
));