PHP:函数类似于数组构造函数

时间:2013-02-17 09:11:21

标签: php arrays casting variadic-functions

我几年没有使用过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.

4 个答案:

答案 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'   
} 
相关问题