0

谁能解释为什么下面的代码会导致“找不到类”错误?使用完全限定名称实例化类是可行的,但会消除“use”语句的优势。

<?php

namespace
{
    use Foo\Bar;

    new Bar;    // Works

    $class = 'Foo\Bar'; 

    new $class; // Works

    $class = 'Bar';

    new $class; // "Cannot find class" error
}

namespace Foo
{
    class Bar {}
}

谢谢

4

1 回答 1

2

好吧,我想这实际上是一个功能。出于同样的原因,别名在这里也无济于事:

导入是在编译时执行的,因此不会影响动态类、函数或常量名称。[...]

<?php 
use My\Full\Classname as Another, My\Full\NSname;

$obj = new Another; // instantiates object of class My\Full\Classname
$a = 'Another'; 
$obj = new $a;      // instantiates object of class Another 
?>

是的,它有点违背了use动态类的目的。

于 2012-09-19T16:23:03.883 回答