有没有办法以与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?有办法吗?或者我应该避免它的原因?
答案 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
....
}
答案 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"
));