2

私はnamespace以下のようなクラスに使用します、

class_tidy.php、

namespace foo;

class tidy {
    public function hello() {
        echo 'Hello';
    }
}

index.php、

class MyAutoloader
{
    public static function load($className)
    {
        $parts = explode('\\', $className);
        require 'classes/class_'.end($parts) . '.php';
    }
}

spl_autoload_register("\MyAutoloader::load");

$test = new foo\tidy();
$test->hello();

完璧に動作しますが、クラスにアクセスできるのではなく、

$test = new foo\tidy();

だが、

$test = new foo::tidy(); 

きれいに見えます。しかし、このエラーでは、

解析エラー:構文エラー、予期しないT_STRING、T_VARIABLEまたは'$'..が必要です。

4

3 に答える 3

5

できません。PHP 構文は\名前空間に使用します。

実際のところ、php は T_PAAMAYIM_NEKUDOTAYIM (二重コロンの名前) をただ 1 つの目的で使用し、クラス名の後にそれを使用して、そのクラスのメンバーが必要であることを指定します。

これが機能する方法には、PHP を名前空間 sperator としても使用できないようにする不明瞭な詳細があると思いますが、どれかはわかりません。(問題は、これは、公式の php から分岐して独自のバージョンを作成したとしても、必要なわずかな構文変更を取得するためだけに多くの作業を行う必要があることを意味します。)

于 2012-04-20T20:25:18.847 に答える
1

PHP チームは名前空間の区切り文字として \ を選択しています。::のほうがいいと思っても変えることはできません。なぜそうするのか聞いてもいいですか?

于 2012-04-20T20:25:45.623 に答える
1

公式マニュアルを読んでください: http://php.net/language.namespaces.nestedは、 スコープ解決演算子::として既に使用されている (したがって予約されている) ため、名前空間区切りとしてサポートされていません。

Foo::$bar;

また興味深い: 対応する RFC https://wiki.php.net/rfc/namespaceseparator

于 2012-04-20T20:28:44.993 に答える