2012-07-03 12 views
10

Używam już od pewnego czasu phpsh, a to działało świetnie w przeszłości. Ale obsługa przestrzeni nazw nadal nie jest bardzo dobra i może to być dość frustrujące.REPL/interaktywna powłoka z właściwą obsługą PHP 5.3?

Rzeczy takie jak \Somespace\Someclass::someStaticFunction() nie działają bez wyłączania sprawdzania, czy istnieje metoda, co prowadzi do częstych błędów krytycznych na literach, które resetują środowisko.

Istnieje wiele REPL-ów PHP, w tym wbudowana w PHP powłoka (php -a), która jest okropna w użyciu.

Czy ktoś wie o alternatywnej lub może phpsh-fork z odpowiednią obsługą przestrzeni nazw? A może łatwo naprawić konfiguracja Mam pomijane ...


przykład:

Ten testfile:

<? 
namespace testing; 

function echoSome(){ 
     echo 'Something'; 
} 

\testing\echoSome(); 

produkuje to wyjście w phpsh (zgodnie z oczekiwaniami)

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

Ale ponowne wykonanie tego samego połączenia nie działa:

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

bez nazw funkcja jest nadal dostępna:

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

echoSome(); 

w phpsh:

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

i wywołanie nadal działa:

php> echoSome(); 
Something 
+0

Czy mógłbyś opisać nieco bardziej szczegółowo, czego brakuje w obsłudze przestrzeni nazw phpsh? – Doa

+0

Dodam fragment tego, co uważam za mylące, ale może @michiel też może wyjaśnić? – Nanne

+0

Tak, jest to doskonały przykład tego, co miałem na myśli. Oprócz \ someNameSpace \ someFunction(); someNamespace \ SomeClass :: someFunction() również nie działa. Iirc są również problemy z anonimowymi funkcjami (kolejna funkcja 5.3), ale mój mózg pozbawiony kofeiny nie może teraz pamiętać. – Marlies

Odpowiedz

2

Istnieje kilka alternatyw.

Po pierwsze, możesz wypróbować CLI dla PHP 5.4. Interaktywna konsola została znacznie ulepszona do wersji 5.4, rzekomo. Prawdopodobnie zgodzili się z tobą, że wbudowana powłoka była okropna w użyciu :) Wiem tylko, że została "odnowiona".

Istnieje kilka alternatyw, takich jak phpa, który wydaje się dość przestarzały i działa najnowszy git version of phpsh. Wiedzą o problemach z przestrzenią nazw, sądząc po stronie "Problemy", więc mogą próbować to poprawić. Ponieważ jest to oprogramowanie open source, możesz poprosić kogoś, aby naprawił to za Ciebie, lub napraw to sam ;-)

Myślę, że ogólnie masz do czynienia z wyborem pomiędzy normalnym PHP CLI lub phpsh. Nie ma alternatywy, które są wystarczająco dojrzałe, aby zrobić to, co można, a większość alternatyw jest jeszcze bardziej przestarzała (tj. Istnieje php_repl, która została zaktualizowana 3 lata temu, w przeciwieństwie do 2 lat phpsh).

Powodzenia

+0

Ale szukanie interaktywnej powłoki dla 5.3 nie skończy się na konsoli od 5.4. Zgaduję? Najnowsza wersja gita jest dość stara, nie jestem pewna, co by to osiągnąć? – Nanne

+0

Nie zauważyłem, jak przestarzała jest wersja git, przepraszam za to. Jeszcze bardziej aktualny niż jakiekolwiek alternatywy poza normalnym php-cli. Obawiam się, że skończysz z konsolą od wersji 5.4, chyba że jest jakiś tajny wideoklip phpsh, którego nie jestem świadomy. – Doa

+2

Dobrze, okazuje się, że nie przetestowałem poprawnie wersji git. Jak się wydaje, obsługuje "\ namespace \ foo :: bar()", więc po prostu nie akceptuje "namespace \ foo :: bar()", które sam PHP * robi * akceptuje. To tylko drobna niedogodność, więc wydaje mi się, że zbyt szybko odrzuciłem wersję git. Zaznaczam to jako odpowiedź :) – Marlies

3

Okazało się, że za pomocą eval pracował jako dobrego rozwiązania:

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

Yea, to hack ale poręczne jeden.:)

Powiązane problemy