在PHP中创建数组中的引用键

时间:2014-07-24 02:32:39

标签: php arrays pass-by-reference

目前,我的脚本创建了引用键:

<?php
$arr = array(
    'authority'      => $this->object->authority,
    'fragment'       => $this->object->fragment,
    'host'           => $this->object->host,
    'pass'           => $this->object->pass,
    'path'           => $this->object->path,
    'port'           => $this->object->port,
    'query'          => $this->object->query,
    'scheme'         => $this->object->scheme,
    'scheme_name'    => $this->object->scheme_name,
    'scheme_symbols' => $this->object->scheme_symbols,
    'user'           => $this->object->user,
);

$arr['domain']   = &$arr['host'];
$arr['fqdn']     = &$arr['host'];
$arr['password'] = &$arr['pass'];
$arr['protocol'] = &$arr['scheme'];
$arr['username'] = &$arr['user'];

ksort($arr);
return $arr;

我的问题是:有更好的方法来实现这一点,可能一次又一次吗?

我知道下面的代码不起作用,但也许有人知道更好的方法吗?

<?php
$arr = array(
  'a' => '1',
  'b' => &$arr['a']
);

1 个答案:

答案 0 :(得分:2)

  

我需要重新创建数组而不引用原始对象

您应该使用PHP5中引入的object cloning。这将允许您使用当前值制作对象的副本,同时允许原始类维护对已经存在的其他变量的任何引用:

$arr = clone $this->object;

变量可以作为类属性访问,而不是像示例中的数组键一样。如果您遇到问题,可以使用get_class_vars()之类的内容返回班级属性的数组。