2011-06-24 23 views
11

私は名前空間を使ってウェブをほとんど作っていません。私は自分のコンピュータに持っていて、私はPHP 5.2を使った無料のホスティングに移行しようとしています。 PHP 5.2の構文highlighterは、それらをエラーとして解釈します。PHPの名前空間5.2

php 5.2では名前空間がサポートされていますか?

既存のコードにほとんど変更を加えずに使用する方法はありませんか?

+0

いいえこのかわいいマニュアルを読んでください:http://php.net/manual/en/language.namespaces.php –

+0

これはサポートされていませんが、もちろん削除することもできます。 /stackoverflow.com/questions/1836387/strategy-for-developing-namespaced-and-non-namespaced-versions-of-same-php-code/3661724#3661724 - あなたがそれを求めているかどうか、またはこれが本当に構文の強調表示について? – mario

+1

PHP preprocesソーは良いと思う。しかし、私はまた、そのスクリプトでは処理されない変数クラス名を使用します。 – kravemir

答えて

26

5.3より前の名前空間はサポートされていません。残念なことに5.2にそれらを適応させる方法は実際にはありません。

7

名前空間でのみ利用可能ですグローバル名前空間内の名前。 __autoload()関数と組み合わせて、ユニバーサルエイリアスを1つ作成して、元の名前で名前が付けられたクラスと名前の前に何らかの余分な識別子が付いた名前の両方をチェックできるようにすることができます。私は例として "ns"を使用します。

function __autoload($class){ 
    try{ 
    require_once('ns'.$class.'.php'); 
    }catch(Exception $e){ 
    echo 'The class is unavailable in pseudo-namespace as well as global'; 
    } 
} 

必要なパスがモデルを保持する場所を指していることを確認してください。エイリアスの代わりに別のフォルダを使用することもできます。

このように、重複するクラスは、グローバルに存在しない場合にのみ含まれるメイン実行とは別のファイルに置くことができます。これにより、クラス名を物理的に変更しなければならないという問題は厳密には解決されませんが、バージョン管理などの目的で異なるディレクトリに定義を置くことができます。

0

IVEはこの問題を克服しました。画像処理(トリミング)を助けるためにサードパーティ製のコードを追加しましたが、ネームスペースを使用していましたが、自分のマシンでうまく動作しますが、ライブサーバーにアップロードするとParseエラーが発生します。

幸いにも私のホストは、IVEが私のために5.3に変更してもらったので、それは問題を解決することを望んでイムを持つイム、単に名前空間を削除すると失敗するスクリプトを作った、PHP 5.3および5.4をサポートしています:(

ポール