PHP使用NameSpace调用未定义的函数

时间:2019-01-07 04:15:43

标签: php function class namespaces

我开始使用“命名空间”进行编码。

Core.php:

namespace Language;
    class LanguageCore {
        private $langCode = "pl";
        private $language;
        public function __construct(){
            if(file_exists("lang/".substr($_SERVER['HTTP_ACCEPT_LANGUAGE'], 0, 2).".php"))
                $this->langCode = substr($_SERVER['HTTP_ACCEPT_LANGUAGE'], 0, 2);
            require_once "lang/".$this->langCode.".php";
            $this->language = new language();
        }
        public function gt($index = null)
        {
            return "its work";
        }
    }

一个工作得很好

Index.php:

  require_once 'core.php';
  use Language\LanguageCore as Lang;

  $lang = new Lang();
  echo $lang->gt(); // return "its work"

但是当我尝试添加“使用功能”时,出现了致命错误

  require_once 'core.php';
  use Language\LanguageCore as Lang;
  use function Language\LanguageCore\gt as _;

  $lang = new Lang();
  echo _(); // return error

错误消息:

Fatal error:  Uncaught Error: Call to undefined function Language\LanguageCore\gt()

我在做什么错了?

致谢!

编辑: 我需要在一个类中使用此函数,因为我在此函数中使用了一个类变量。

1 个答案:

答案 0 :(得分:1)

如果要从LanguageCore类访问gt方法,则需要以这种方式调用它:

require_once 'core.php';
use Language\LanguageCore as Lang;

$lang = new Lang();
echo $lang->gt();

这是因为gt是LanguageCore类的方法。因此,启动此类时,您将需要对存储在$ lang变量中的对象调用方法。

如果要使用use function语法。如本例所示,您将不得不将该方法移出类:

namespace Language {

function gt($index = null)
{
    return "its work";
}

class LanguageCore {
    private $langCode = "pl";
    private $language;

    public function __construct()
    {
        ...
    }

    public function gt($index = null)
    {
        return "its work";
    }
}
}