Codeigniter:instantiate_class function()

1 php codeigniter

当我阅读 Codeigniter 的源代码时,我发现了一个位于 file:system/codeigniter/comm.php 中的函数,如下所示:

/**
* Instantiate Class
*
* Returns a new class object by reference, used by load_class() and the DB class.
* Required to retain PHP 4 compatibility and also not make PHP 5.3 cry.
*
* Use: $obj =& instantiate_class(new Foo());
*/
function &instantiate_class(&$class_object)
{
    return $class_object;
}
Run Code Online (Sandbox Code Playgroud)

我不能很好地理解它,我需要更多关于兼容性的细节。谢谢。

更新:Codeigniter 版本是 1.7.2

hak*_*kre 5

有问题的函数及其示例使用完全是假的:

$obj =& instantiate_class(new Foo());
Run Code Online (Sandbox Code Playgroud)

这和写一样:

$obj =& new Foo();
Run Code Online (Sandbox Code Playgroud)

这是需要在 PHP 4 中完成的方式。

从 PHP 5 开始,你可以只写:

$obj = new Foo();
Run Code Online (Sandbox Code Playgroud)

你可能知道。

实际上,作为您,我不认为该功能的任何用途仅仅是为了它是多余的。它过去可能有一些需要(当它有其他定义时)。我只能假设它的存在,很可能是开发人员在理解PHP 中的引用/别名时遇到了问题,这通常不太好理解。

编辑:正如 KingCrunch 所指出的,如果您想将 PHP 4 与 PHP 5.3 代码粘合在一起,则需要此功能,因为它会阻止 PHP 5.3 中的严格标准警告。因此,而不是 PHP 4(可能需要)

$obj =& new Foo();
Run Code Online (Sandbox Code Playgroud)

这必须写成

$obj =& instantiate_class(new Foo());
Run Code Online (Sandbox Code Playgroud)

这隐藏了“不推荐使用引用分配 new 的返回值”警告,并允许在 PHP 5.3 环境中以 PHP 4 样式进行编码。

希望这对您的软件考古有所帮助。

  • 正如上面的评论中提到的:`$obj =& new Foo;` 在 5.3 中发出了一个 `strict` 警告。我想,这就是他们所说的“哭泣” (2认同)