2012-07-03 12 views
10

He estado usando phpsh desde hace un tiempo, y ha funcionado bien en el pasado. Pero su soporte de espacio de nombres todavía no es muy bueno y esto puede ser bastante frustrante.REPL/caparazón interactivo con soporte adecuado de PHP 5.3?

Cosas como \Somespace\Someclass::someStaticFunction() no funcionan sin deshabilitar la comprobación de si existe o no un método, lo que conduce a frecuentes errores fatales en errores tipográficos que restablecen su entorno.

hay múltiples REPLs PHP por ahí, incluyendo el PHP incorporado shell (php -a), que es horrible de usar.

¿Alguien sabe de una alternativa o tal vez un phpsh-tenedor con el soporte adecuado espacio de nombres? O tal vez una solución fácil configuración he pasado por alto ...


un ejemplo:

Este testfile:

<? 
namespace testing; 

function echoSome(){ 
     echo 'Something'; 
} 

\testing\echoSome(); 

produce esta salida en phpsh (como se esperaba)

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

Pero tratar de la misma llamada de nuevo no funciona:

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

sin espacios de nombres de la función sigue estando disponible:

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

echoSome(); 

en phpsh:

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

y la llamada sigue funcionando:

php> echoSome(); 
Something 
+0

¿Podría describir con un poco más de detalle lo que le falta al soporte del espacio de nombres de phpsh? – Doa

+0

Agregaré un fragmento de lo que encuentro confuso, pero ¿quizás @michiel puede aclarar algunos también? – Nanne

+0

Sí, este es un ejemplo perfecto de lo que quise decir. Aparte de \ someNameSpace \ someFunction(); someNamespace \ SomeClass :: someFunction() tampoco funciona. Iirc también presenta problemas con las funciones anónimas (otra función de 5.3), pero mi cerebro privado de cafeína no puede recordarlo en este momento. – Marlies

Respuesta

2

Hay un par de alternativas.

En primer lugar, es posible que desee probar la CLI para PHP 5.4. La consola interactiva se ha mejorado mucho para 5.4, supuestamente. Probablemente estuvieron de acuerdo contigo en que el shell incorporado era horrible de usar :) Todo lo que sé es que ha sido "restaurado".

Existen algunas alternativas, como phpa, que parece bastante obsoleta, y ejecuta el último git version of phpsh. Son conscientes de los problemas del espacio de nombres, a juzgar por su página de "Problemas", por lo que podrían tratar de mejorar eso. Dado que es de código abierto, podrías conseguir que alguien lo arregle por ti, o arreglarlo tú mismo ;-)

Creo que, en general, te enfrentas a la elección entre PHP CLI normal o phpsh. No hay alternativas que son lo suficientemente maduros como para hacer lo que cualquiera puede hacer, y la mayoría de las alternativas son aún más obsoleta (es decir, no hay php_repl, que se ha actualizado hace 3 años, en contraposición a 2 años de phpsh).

Buena suerte

+0

Pero buscar un shell interactivo para 5.3 no terminará con la consola desde 5.4 ¿supongo? La última versión de Git es bastante antigua, ¿no estoy seguro de lo que lograría? – Nanne

+0

No me di cuenta de lo obsoleta que es la versión de Git, lo siento. Aún más reciente que cualquier alternativa además de la php-cli normal. Temo que termines con la consola desde 5.4, a menos que haya algún secreto de phpsh que desconozco. – Doa

+2

Correcto, resulta que no había probado correctamente la versión de Git. Como parece, admite "\ namespace \ foo :: bar()" muy bien, simplemente no acepta "namespace \ foo :: bar()" que PHP * acepta *. Eso es solo un inconveniente menor, así que parece que descarté la versión de Git demasiado rápido. Estoy marcando esto como la respuesta :) – Marlies

3

He encontrado que el uso de eval trabajó como una buena solución:

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

Sí, es un truco, pero un uno a mano.:)

Cuestiones relacionadas