'is_array' 和 '\is_array' 之间的区别

6
if(is_arrray($arr)
{
    //code...
}

 if(\is_array($arr)
 {
     //code..
 }

这两个条件得到的结果是相同的。但是,确切地说,它们之间有什么区别呢?


\is_array 的意思是:给我全局命名空间中的 is_array 函数。而 \Eldhose\is_array 可能是在 Eldhose 命名空间下创建的另一个函数。 - Savas Vedova
1个回答

10
当您使用命名空间时,可以覆盖命名空间中的本地函数,而当您使用\时,则调用全局函数。
您可以在namespaces.fallback中了解更多信息。
这是从php.net提取的一个小例子:
<?php
namespace A\B\C;

const E_ERROR = 45;
function strlen($str)
{
    return \strlen($str) - 1;
}

echo E_ERROR, "\n"; // prints "45"
echo INI_ALL, "\n"; // prints "7" - falls back to global INI_ALL

echo strlen('hi'), "\n"; // prints "1"
if (is_array('hi')) { // prints "is not array"
    echo "is array\n";
} else {
    echo "is not array\n";
}
?>

+1:我以前不知道PHP有命名空间,也从未关心过它。但这绝对是一条有用的信息,肯定回答了这个问题。 - Kiruse
1
@Derija93 命名空间非常重要:http://www.phptherightway.com/#namespaces - mcuadros
歧义通常不是我的问题,因为我更专注于客户端脚本。每当我编写PHP时,它都与定义环境中的高度特定任务密切相关,并且代码通常不会共享。因此,如果在这三个函数上加前缀可以同样好地工作,为什么要关心使用命名空间呢? - Kiruse

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接