从CodeIgniter的show_error
函数中获取以下代码:
$_error =& load_class('Exceptions', 'core');
load_class
函数的文档说它充当单例。该函数基本上采用给定的参数并在适当的路径中搜索类。然后它包含文件(如果存在)。该函数声明为:
function &load_class(...)
为什么它有&它的目的是什么? $_error
是否被声明为定义函数的结果?
答案 0 :(得分:1)
我没有看到任何声明和使用load_class
的意思。从load_class()
的源代码中,我们可以看到它将加载的对象缓存在一个以类名作为键的数组中。如果它不在缓存中,则会加载给定名称的对象,然后将该对象引用存储到数组中。在这两种情况下,它都返回数组的元素(通过引用)。
通过引用返回允许调用者具有对数组元素的引用。这使我们能做的唯一事情是:
load_class
函数在设置后不会更改与键关联的值。load_class
函数。但这是一个非常可疑的做法,从外面搞乱缓存,我非常怀疑这是作者想要的。因此没有合理的理由通过引用返回。我的猜测是它是PHP 4的剩余部分,当对象是值时,因此分配或返回“对象值”会复制它。在PHP 5中,对象不是值;您只能通过对象引用来操作它们,并且按值分配或返回对象引用永远不会复制它指向的对象。
答案 1 :(得分:0)
php documentation似乎解释了为什么你必须使用=&
,即使该函数被标记为返回参考function &load_class
返回参考文献
当您想要使用函数时,通过引用返回很有用 找到应该绑定引用的变量。不使用 按引用返回以提高性能。引擎会 自动优化它。仅在返回时引用 你有充分的技术理由这样做。要返回引用,请使用 这句语法:
<?php class foo {
public $value = 42;
public function &getValue() {
return $this->value;
}
}
$obj = new foo;
$myValue = &$obj->getValue(); // $myValue is a reference to $obj->value, which is 42.
$obj->value = 2;
echo $myValue;
// prints the new value of $obj->value, i.e. 2. ?>
在此示例中,
getValue函数返回的对象的属性是 设置,而不是副本,因为没有使用引用语法。 注意:与参数传递不同,这里你必须使用&amp;在这两个地方 - 表示您希望通过引用而不是副本返回,并指示引用绑定而不是通常的赋值应该 $ myValue。
如果您在询问documentation解释的一般参考文献。