Home  >  Article  >  Backend Development  >  一个关于PHP命名空间的疑惑

一个关于PHP命名空间的疑惑

WBOY
WBOYOriginal
2016-06-06 20:51:19983browse

在编程的时候遇到这样一个关于命名空间的问题,先上代码:

namespace Test {

    class Test {}
}

namespace Chou {

    use Test\Test;

    class Mee {

        public $class = 'Test';

        public function getClass()
        {
            return new $this->class();
        }
    }

    $tmp = new Mee();
    $tmp->getClass();
}

我试图在getClass方法中通过变量动态实例化另一个命名空间的类,但是触发了“Class not found”错误。我觉得时$class变量的问题,所以又把测试代码简化了一下:

namespace Chou {

    use Test\Test;

    $test = 'Test';
    $tmp = new $test();
}

果然出现了和预期一样的错误。我知道可以通过完全限定的方式来解决,但是我仍然想明白这是什么原理,还望高手解惑。

是我自己疏忽了,在手册中找了命名空间和动态语言特征

回复内容:

在编程的时候遇到这样一个关于命名空间的问题,先上代码:

namespace Test {

    class Test {}
}

namespace Chou {

    use Test\Test;

    class Mee {

        public $class = 'Test';

        public function getClass()
        {
            return new $this->class();
        }
    }

    $tmp = new Mee();
    $tmp->getClass();
}

我试图在getClass方法中通过变量动态实例化另一个命名空间的类,但是触发了“Class not found”错误。我觉得时$class变量的问题,所以又把测试代码简化了一下:

namespace Chou {

    use Test\Test;

    $test = 'Test';
    $tmp = new $test();
}

果然出现了和预期一样的错误。我知道可以通过完全限定的方式来解决,但是我仍然想明白这是什么原理,还望高手解惑。

是我自己疏忽了,在手册中找了命名空间和动态语言特征

手册里有写,在变量中使用命名空间必须使用完全限定名称,规定如此。

http://php.net/manual/zh/language.nam...

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn