2012-07-03 24 views
10

Tôi đã sử dụng phpsh trong một thời gian và đã hoạt động tốt trong quá khứ. Nhưng sự hỗ trợ không gian tên của nó vẫn không phải là rất tốt và điều này có thể khá bực bội.REPL/shell tương tác với hỗ trợ PHP 5.3 thích hợp?

Những thứ như \Somespace\Someclass::someStaticFunction() không hoạt động mà không tắt kiểm tra xem có tồn tại phương pháp hay không, dẫn đến lỗi thường xuyên gây tử vong đối với lỗi chính tả đã đặt lại môi trường của bạn.

Có nhiều bản REPL của PHP, bao gồm cả trình tích hợp sẵn PHP (php -a), điều này thật kinh khủng khi sử dụng.

Có ai biết thay thế hoặc có lẽ là một ngã ba phpsh có hỗ trợ không gian tên thích hợp không? Hoặc có lẽ một sửa chữa dễ dàng cấu hình tôi đã bỏ qua ...


một ví dụ:

testfile này:

<? 
namespace testing; 

function echoSome(){ 
     echo 'Something'; 
} 

\testing\echoSome(); 

sản xuất sản lượng này trong phpsh (như mong đợi)

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

Nhưng việc thử lại một lần nữa không hoạt động:

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

không gian tên chức năng vẫn còn có sẵn:

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

echoSome(); 

trong phpsh:

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

và cuộc gọi vẫn hoạt động:

php> echoSome(); 
Something 
+0

Bạn có thể mô tả chi tiết hơn một chút về những gì bạn thấy thiếu trong hỗ trợ không gian tên của phpsh không? – Doa

+0

Tôi sẽ thêm một đoạn nội dung tôi thấy khó hiểu, nhưng có thể @michiel cũng có thể làm rõ một số nội dung? – Nanne

+0

Vâng, đây là một ví dụ hoàn hảo về ý tôi. Ngoài \ someNameSpace \ someFunction(); someNamespace \ SomeClass :: someFunction() cũng không hoạt động. Iirc cũng có vấn đề với các chức năng ẩn danh (một tính năng 5.3 khác), nhưng bộ não bị thiếu chất caffein của tôi không thể nhớ được ngay bây giờ. – Marlies

Trả lời

2

Có một vài lựa chọn thay thế.

Trước hết, bạn có thể muốn thử CLI cho PHP 5.4. Bảng điều khiển tương tác đã được cải thiện rất nhiều cho 5.4, được cho là. Họ có thể đồng ý với bạn rằng chúng được xây dựng trong vỏ là khủng khiếp để sử dụng :) Tất cả tôi biết là nó đã được "tân trang".

Có một vài lựa chọn thay thế, chẳng hạn như phpa, có vẻ như đã lỗi thời và chạy phiên bản git version of phpsh mới nhất. Họ nhận thức được vấn đề không gian tên, đánh giá từ trang "Vấn đề" của họ, vì vậy họ có thể cố gắng cải thiện điều đó. Vì nó là mã nguồn mở, bạn có thể nhờ ai đó sửa chữa nó cho bạn, hoặc tự sửa nó ;-)

Tôi nghĩ, bạn đang phải đối mặt với sự lựa chọn giữa PHP CLI bình thường, hoặc phpsh. Không có lựa chọn thay thế đủ trưởng thành để làm những gì có thể làm, và hầu hết các lựa chọn thay thế thậm chí còn lỗi thời hơn (tức là, có php_repl, đã được cập nhật 3 năm trước, trái ngược với 2 năm của phpsh).

Chúc may mắn

+0

Nhưng tìm kiếm một trình bao tương tác cho 5.3 sẽ không kết thúc với bảng điều khiển từ 5.4 Tôi đoán? Các phiên bản git mới nhất là khá cũ, tôi không chắc chắn những gì sẽ thực hiện? – Nanne

+0

Tôi không nhận thấy phiên bản git lỗi thời, xin lỗi về điều đó. Vẫn còn gần đây hơn bất kỳ lựa chọn thay thế bên cạnh php-cli bình thường. Tôi sợ rằng bạn sẽ kết thúc với giao diện điều khiển từ 5,4, trừ khi có một số ngã ba bí mật của phpsh mà tôi không biết. – Doa

+2

Phải, hóa ra tôi đã không kiểm tra phiên bản git đúng cách. Dường như, nó hỗ trợ "\ namespace \ foo :: bar()" tốt, nó không chấp nhận "namespace \ foo :: bar()" mà bản thân PHP * * chấp nhận. Đó chỉ là một sự bất tiện nhỏ vì vậy có vẻ như tôi đã loại bỏ phiên bản git quá nhanh. Tôi đánh dấu đây là câu trả lời :) – Marlies

3

tôi thấy rằng việc sử dụng eval làm việc như một cách giải quyết tốt:

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

Yea, đó là một hack nhưng một tiện dụng.:)

Các vấn đề liên quan