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 に答える