1

我已经有几年没有使用 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=>value 参数的函数。提前感谢您的建议。

更新
我希望将来有以下变化,因为我认为 PHP 的主要优势在于它的灵活性和普遍的疯狂(也是它的弱点)。不支持命名参数: 关于命名参数等项目的 PHP 语言会议。

4

4 回答 4

2

可变数量的参数是可能的func_get_args

function f()
{
    $args = func_get_args();
    // ...
}

但是函数没有“键=>值参数”之类的东西。所以你唯一能做的就是将它们作为数组传递(这使得整个函数变得毫无意义):

function arrayToObject(array $from)
{
     return (object)$from;
}
于 2013-02-17T09:15:57.483 回答
1

PHP 不允许命名参数,所以这是不可能的。数组不是函数而是语言结构,这就是为什么它是唯一可以使用键值分配的地方

于 2013-02-17T09:14:59.757 回答
0

听起来您正在尝试将数组转换为对象。如果是这种情况,您可以这样做:

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'
于 2013-02-17T09:21:12.850 回答
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'   
} 
于 2013-02-17T11:42:55.900 回答