當有名稱空間namespace時,function_exists的傳參

4pmzzzzzzzzzz發表於2021-02-22
<?php
namespace DeepCopy;

use function function_exists;

if (false === function_exists('DeepCopy\deep_copy')) {
    /**
     * Deep copies the given value.
     *
     * @param mixed $value
     * @param bool  $useCloneMethod
     *
     * @return mixed
     */
    function deep_copy($value, $useCloneMethod = false)
    {
        return (new DeepCopy($useCloneMethod))->copy($value);
    }
}

今天看到這段程式碼後,一開始不知道為什麼function_exists傳的是DeepCopy\deep_copy,不太理解就看PHP文件吧,function_exists文件.在文件的User Contributed Notes找到了答案
It should be noted that the function_exists check is not relative to the root namespace. This means that the namespace should be appended to the check:

namespace test;

if (!function_exists(__NAMESPACE__ . '\example'))
{

    function example()
    {

    }

}
?>

然後自己寫一個進行測試

<?php
namespace test;
function index()
{
    var_dump(function_exists('test'));//false
    var_dump(function_exists(__NAMESPACE__ . '\test'));//true
}
function test(){}
index();

一個false,一個true,這是因為有名稱空間時,這是函式是歸屬在當前名稱空間下的,所以需要加上名稱空間才能獲取到

本作品採用《CC 協議》,轉載必須註明作者和本文連結

相關文章