show_error
从 CodeIgniter 的函数中获取以下代码:
$_error =& load_class('Exceptions', 'core');
该load_class
函数的文档说它充当单例。该函数基本上采用给定的参数并在适当的路径中搜索类。然后它包含该文件(如果存在)。该函数声明为:
function &load_class(...)
为什么它有&,它的目的是什么?$_error
像这样定义函数的结果是这样声明的吗?
show_error
从 CodeIgniter 的函数中获取以下代码:
$_error =& load_class('Exceptions', 'core');
该load_class
函数的文档说它充当单例。该函数基本上采用给定的参数并在适当的路径中搜索类。然后它包含该文件(如果存在)。该函数声明为:
function &load_class(...)
为什么它有&,它的目的是什么?$_error
像这样定义函数的结果是这样声明的吗?
我没有看到任何声明和使用load_class
这样的意义。从源码中load_class()
可以看出,它以类名为key,将加载的对象缓存在一个数组中。如果它不在缓存中,它会加载一个给定名称的对象,然后将该对象引用存储到数组中。在这两种情况下,它都返回数组的元素(通过引用)。
通过引用返回允许调用者拥有对数组元素的引用。这允许我们做的唯一事情是:
load_class
函数在设置键后永远不会更改与键关联的值。load_class
函数不知道的情况下更改数组中的元素。但这将是一个非常可疑的做法,从外部弄乱缓存,我非常怀疑这是作者想要的。因此,没有正当理由通过引用返回。我的猜测是它是 PHP 4 的遗留物,当时对象是值,因此分配或返回“对象值”会复制它。在 PHP 5 中,对象不是值;您只能通过对象引用来操作它们,并且通过值分配或返回对象引用永远不会复制它指向的对象。
php文档似乎解释了为什么你必须使用=&
即使该函数被标记为返回一个参考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 函数返回的对象的属性将被设置,而不是副本,因为它不会使用引用语法。 注意:与参数传递不同,这里你必须在两个地方都使用 & - 表示你想通过引用而不是副本返回,并表示应该为 $myValue 进行引用绑定,而不是通常的赋值。
如果您询问文档解释的一般参考资料。