1

有没有办法以类似于 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

4 回答 4

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);
于 2011-01-13T14:51:10.540 回答
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;
   }
}
于 2011-01-13T14:52:00.820 回答
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()

于 2011-01-13T14:53:50.223 回答
-1

我能想到的最接近的是使用array()and 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"
));
于 2011-01-13T14:57:54.343 回答