2011-06-19 29 views
3

をインポートすると、次のように変数を使用して名前空間をインポートすることも可能であろう:変数の名前空間

$namespace = 'User\Authorization\Certificate'; 
use $namespace; 

use文は定数を期待したが、回避策があると明らかにこれは実行されませんか?

編集:class_alias($namespace, alias);use User\Authorization\Certificate as alias;はそのために使用されますとほとんど同じことを行います。宝石を発見(唯一のPHP> 5.3で)。

+1

私はあなたが達成しようとしているのだろうかと思います。 – hakre

+0

私は非常に構造化されたクラスとフォルダ階層の助けを借りてrequire_onceとuseステートメントをimport(..)関数に結合しています。 –

+0

名前空間を導入するために必要なファイルの内容を変更することは相当ですか? – hakre

答えて

2

、あなたは場所は、名前空間と変数に期待「短い」クラス名とは、使用することができますほとんどの場所で、あなたがそれを必要とするだろう場所ということ、newを呼び出すように。

$namespace = '\foo\bar'; 
$class = 'baz'; 
$fully_qualified = $namespace . '\\'. $class; // \foo\bar\baz 
$a_foo_bar_baz = new $fully_qualified(...); 
var_dump($a_foo_bar_baz instanceof $fully_qualified); // true 
+1

私はclass_alias(..)関数を使っていました。コードでとても良い解決策を達成する。 –

0

いいえ、PHPはuseが式(定数ではありません)ではなく名前空間に従うことを期待しています。 Using namespaces: Aliasing/Importingを参照してください。

しかし、あなたのシステム内で何らかの種類の集約やコンパイル段階でPHPコードを実行する前にPHPコードを変更した場合、そのテキストをPHPで十分に静的に見える変数データに置き換えることができます。

しかし、あなたのシステムがそうすることができるかどうかはわかりません。私はそのうちにstream wrapperまたはstream filterをやっていると思います。変数名前空間名を透過的に挿入することができます。それはuseに変数に名前空間を渡すことはできませんが

+0

.phpファイルをオンザフライで変更すると、複数のユーザーが同時にアクセスすると0バイトに切り捨てられることがあります。そのようなことは...私の.txt "データベース"の恐ろしい経験を覚えています。 + mysqlホスティングは非常に稀で、あなたが支払う必要がありました。 –

+0

これは当てはまるとは思わない。もしそうなら、既に裸のrequire/includeのためには問題になるだろう。ファイルを変更しても、実際にファイルを再度保存する必要はありません。 – hakre

+0

あなたは.phpの読み込み、テキストの変更、そして 'eval()'の使用を意味しましたか? –