6

名前空間からの定数の使用に問題があります。定数を定義してそのまま使おうとすると、PHPが見つからないようです。たとえば、定数を含むファイルには、次の行に沿ったコードがあります。

namespace \my\namespace\for\constants;

const DS = DIRECTORY_SEPARATOR;

次に、消費ファイルに次のものがあります。

namespace \some\other\namespace;

use \my\namespace\for\constants\DS as DS;

echo (realpath (DS . 'usr' . DS 'local'));

ただし、期待どおり「/usr/local」をエコーする代わりに、次の通知と空の文字列が表示されます。

注意: 未定義の定数 DS の使用 - 'DS' を想定

次のようにコードを変更すると:

use \my\namespace\for\constants as cns;

echo (realpath (cns\DS . 'usr' . cns\DS 'local'));

期待どおりの結果が得られますが、定数を直接引き込むことができるよりも明らかに不便です。

名前空間でクラス/インターフェイス/特性をエイリアスできますが、定数もエイリアスできませんか? できるとしたら、どうやって?

4

2 に答える 2

8

ドキュメントを注意深く読む必要があります。

PHP 名前空間は、クラス名の別名付け、インターフェース名の別名付け、および名前空間名の別名付けの 3 種類の別名付けまたはインポートをサポートしています。関数または定数のインポートはサポートされていないことに注意してください。

http://php.net/manual/en/language.namespaces.importing.php

// trying to import constant -- not supported
use \my\namespace\for\constants\DS as DS; 
// trying to import namespace -- it's works
use \my\namespace\for\constants as cns; 

アップデート。

PHP 5.6+ では、関数名と定数名のエイリアスまたはインポートも許可されています。

定数をインポートできるようになりました。

于 2013-11-02T09:51:15.603 に答える