2012-07-03 10 views
10

私はしばらくの間phpshを使用していましたが、過去にはうまくいっています。しかし、そのネームスペースのサポートはそれほど良くありません。これはかなりイライラすることがあります。REPL /適切なPHP 5.3サポートの対話型シェル?

\Somespace\Someclass::someStaticFunction()のようなものは、メソッドが存在するかどうかのチェックを無効にしないと機能せず、環境をリセットするタイプミスで頻繁に致命的なエラーが発生します。

PHPの組み込みシェル(php -a)を含め、複数のPHP REPLがありますが、これは恐ろしいものです。

誰かが、代替の、あるいはおそらく適切な名前空間をサポートするphpshフォークについて知っていますか?それとも私が見落としてきた簡単な設定の修正...


例:

このテストファイル:

<? 
namespace testing; 

function echoSome(){ 
     echo 'Something'; 
} 

\testing\echoSome(); 

は(予想通り)phpshでこの出力を生成

php> include '/path/test.php'; 
Something 
php> 

同じ電話をもう一度試してもうまくいきません:

phpshで

<? 
function echoSome(){ 
     echo 'Something'; 
} 

echoSome(); 

php> \testing\echoSome(); 
Not executing input: Possible call to undefined function echoSome() 
See /etc/phpsh/config.sample to disable UndefinedFunctionCheck. 

は、名前空間なしで機能がまだ使用可能である

php> include '/path/test.php'; 
Something 

と呼び出しがまだ動作します:選択肢のカップルがあります

php> echoSome(); 
Something 
+0

あなたは、phpshの名前空間サポートに欠けているものを少し詳しく説明できますか? – Doa

+0

私は紛らわしいもののスニペットを追加しますが、おそらく@michielもいくつかを明確にすることができますか? – Nanne

+0

はい、これは私が意味するものの完全な例です。 \ someNameSpace \ someFunction();とは別に、 someNamespace \ SomeClass :: someFunction()も機能しません。 Iircには匿名機能の問題(別の5.3機能)もありますが、私のカフェインを奪われた脳は今覚えていません。 – Marlies

答えて

2

まず、PHP 5.4用のCLIを試してみるとよいでしょう。対話型コンソールは、5.4のために大幅に改良されている、と言われている。彼らはおそらくあなたに同意したでしょう。シェルを組み込むことは恐ろしいものでした。私が知っているのは、それが "改装された"ということです。

phpaのようないくつかの選択肢がありますが、これは時代遅れのようですが、最新のgit version of phpshを実行しています。彼らは、 "Issues"ページから判断して、名前空間の問題を認識しているので、問題を改善する可能性があります。

私は、全体的にあなたは通常のPHP CLIまたはphpshのいずれかの選択に直面していると思います。これは、オープンソースなので、あなたのためにそれを修正するか、いずれかのことを行うための成熟した選択肢はなく、ほとんどの選択肢は古くなっています(つまり、、phpshの2年ではなく、3年前に更新されています)。私はevalのを使用して良いの回避策として働いていたことが判明

幸運

+0

しかし、5.3の対話型シェルを探すのは、5.4のコンソールで終了しません。最新のgitバージョンはかなり古くなっていますが、私はこれが何を達成するのか分かりません。 – Nanne

+0

私はgitのバージョンが古いことに気付かなかった、それについては残念。通常のphp-cliに加えて、最近の選択肢よりもさらに最近のものです。私が気づいていないphpshの秘密のフォークがない限り、あなたは5.4からのコンソールで終わるのではないかと思います。 – Doa

+2

私はgitのバージョンを適切にテストしていませんでした。 "\ namespace \ foo :: bar()"をサポートしているようですが、PHP自体が受け入れる "namespace \ foo :: bar()"は受け入れられません。それはほんの少しの不便ですので、私はあまりにも迅速にgitのバージョンを却下したようです。私は答えとしてこれをマークしています:) – Marlies

3

php> = eval('return \testing\echoSome();') 

いや、それはハックが、便利な一つです。:)

関連する問題