当我阅读 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
有问题的函数及其示例使用完全是假的:
$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 样式进行编码。
希望这对您的软件考古有所帮助。
| 归档时间: |
|
| 查看次数: |
995 次 |
| 最近记录: |