【问题标题】:PHP Call to undefined function with NameSpacePHP 使用 NameSpace 调用未定义的函数
【发布时间】:2019-06-01 18:28:17
【问题描述】:

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

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()

我做错了什么?

问候!

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

【问题讨论】:

    标签: php function class namespaces


    【解决方案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";
        }
    }
    }
    

    【讨论】:

    • 好的,但是当我需要在类中有这个函数时,因为我在这个函数中使用了类变量,我可以做些什么来获得想要的效果吗?
    • 不能在类方法上使用“使用函数”。
    猜你喜欢
    • 2014-06-15
    • 2015-11-18
    • 2015-09-21
    • 2017-07-20
    • 1970-01-01
    • 1970-01-01
    • 2021-06-05
    • 2013-05-19
    • 2012-04-05
    相关资源
    最近更新 更多