我几年没有使用过PHP - 我主要关注的是C,C ++,Objective-C,Ruby& ECMAScript中。我正在通过尝试其他一些语言让我的思绪保持新鲜。
我在PHP.net上遇到了一个将数组转换为对象的示例,以便通过键访问它的值,就像它们是实例变量一样:
$obj = (object)array('foo' => 'bar', 'property' => 'value');
作为练习,我想创建一个与array
采用相同参数的函数,并返回已经转换为对象的“数组”。类似的东西:
function o_array(\* variable amount of key=>value args like array()*\)
{
return (object)array.call(self, arguments);
}
我不知道如何构造一个在PHP中使用可变数量的key =>值参数的函数。提前感谢您的建议。
的更新
我希望将来有以下变化,因为我认为PHP的主要优势在于它的灵活性和一般的疯狂(也是它的弱点)。不支持命名参数:
PHP language meeting regarding named params among other items.
答案 0 :(得分:2)
使用func_get_args
可以获得可变数量的参数:
function f()
{
$args = func_get_args();
// ...
}
但是没有" key =>值参数"用于功能。所以你唯一能做的就是将它们作为数组传递(这使得整个函数毫无意义):
function arrayToObject(array $from)
{
return (object)$from;
}
答案 1 :(得分:1)
PHP不允许使用命名参数,因此这是不可能的。数组不是一个函数,而是一个语言结构,这就是为什么它是唯一可以使用键值赋值的地方
答案 2 :(得分:0)
听起来你正在尝试将Array转换为Object。如果是这种情况,你可以这样做:
function array_to_object($array) {
$obj = new stdClass;
foreach($array as $k => $v) {
if(is_array($v)) {
$obj->{$k} = $this->array_to_object($v);
} else {
$obj->{$k} = $v;
}
}
return $obj;
}
所以如果您有以下数组:
$a = array('foo' => 'bar', 'property' => 'value');
转换它将导致:
$o = array_to_object($a);
echo ($o->foo ); // will print 'bar'
答案 3 :(得分:0)
根据我的理解,我认为这是最明智的做法。
class Array()
{
public $array = array('foo' => 'bar', 'property' => 'value');
}
//initiate an object...
$obj = new Array();
$array = array_values($obj->array);
print_r($array); //will print 'bar' and 'value'
}