>  기사  >  백엔드 개발  >  一个关于PHP命名空间的疑惑

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

WBOY
WBOY원래의
2016-06-06 20:51:19984검색

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

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...

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.