2012-07-03 12 views
10

मैं थोड़ी देर के लिए phpsh का उपयोग कर रहा हूं, और यह अतीत में बहुत अच्छा काम करता है। लेकिन इसका नामस्थान समर्थन अभी भी बहुत अच्छा नहीं है और यह बहुत निराशाजनक हो सकता है।आरईपीएल/इंटरैक्टिव खोल?

\Somespace\Someclass::someStaticFunction() जैसी चीजें चेक को अक्षम किए बिना काम नहीं करती हैं या नहीं, कोई विधि मौजूद है, जिससे आपके पर्यावरण को रीसेट करने वाले टाइपों पर लगातार घातक त्रुटियां होती हैं।

PHP अंतर्निहित खोल (php -a) सहित कई PHP REPLs हैं, जो उपयोग करने के लिए भयानक हैं।

क्या किसी को उचित नामस्थान समर्थन के साथ वैकल्पिक या शायद एक phpsh-fork पता है? या शायद एक आसान विन्यास ठीक मैं अनदेखी की है ...


एक उदाहरण:

यह testfile:

<? 
namespace testing; 

function echoSome(){ 
     echo 'Something'; 
} 

\testing\echoSome(); 

phpsh में इस निर्गम (उम्मीद के रूप में) का उत्पादन

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

लेकिन फिर से वही कॉल करने का प्रयास नहीं करता है:

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

नामस्थान के बिना समारोह अभी भी उपलब्ध है:

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

echoSome(); 
phpsh में

:

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

और कॉल अभी भी काम करता है:

php> echoSome(); 
Something 
+0

क्या आप थोड़ी अधिक विस्तार से वर्णन कर सकते हैं कि आपको phpsh के नेमस्पेस समर्थन में क्या कमी है? – Doa

+0

मैं जो भ्रमित करता हूं उसे एक स्निपेट जोड़ दूंगा, लेकिन शायद @ मिचिल कुछ भी स्पष्टीकरण दे सकता है? – Nanne

+0

हां, यह मेरा मतलब है कि यह एक आदर्श उदाहरण है। \ SomeNameSpace \ someFunction() के अलावा; कुछ नेमस्पेस \ SomeClass :: कुछ फ़ंक्शन() भी काम नहीं करता है। आईआईआरसी में अज्ञात कार्यों (एक और 5.3 फीचर) के साथ भी समस्याएं हैं, लेकिन मेरे कैफीन से वंचित मस्तिष्क अभी याद नहीं कर सकते हैं। – Marlies

उत्तर

2

विकल्प के एक जोड़े हैं।

सबसे पहले, आप PHP 5.4 के लिए सीएलआई आज़मा सकते हैं। कथित रूप से 5.4 के लिए इंटरैक्टिव कंसोल में काफी सुधार हुआ है। वे शायद आपसे सहमत थे कि वे अंतर्निर्मित खोल का उपयोग करने के लिए भयानक थे :) मुझे पता है कि यह "नवीनीकृत" किया गया है।

कुछ विकल्प हैं, जैसे कि phpa, जो काफी पुराना लगता है, और नवीनतम git version of phpsh चला रहा है। वे नामस्थान मुद्दों के बारे में जानते हैं, उनके "मुद्दे" पृष्ठ से निर्णय लेते हैं, इसलिए वे इसे सुधारने का प्रयास कर सकते हैं। चूंकि यह ओपन सोर्स है, इसलिए आप इसे किसी के लिए ठीक करने के लिए प्राप्त कर सकते हैं, या इसे स्वयं ठीक कर सकते हैं ;-)

मुझे लगता है कि कुल मिलाकर आप सामान्य PHP सीएलआई, या phpsh के बीच पसंद का सामना कर रहे हैं। ऐसा कोई विकल्प नहीं है जो करने के लिए पर्याप्त परिपक्व हो, जो भी कर सकता है, और अधिकतर विकल्प पुराने हैं (यानी, php_repl है, जिसे 3 साल पहले अपडेट किया गया है, जैसा कि पीएचपीएच के 2 साल के विपरीत है)।

गुड लक

+0

लेकिन 5.3 के लिए एक इंटरैक्टिव खोल की तलाश में 5.4 से कंसोल के साथ समाप्त नहीं होगा? नवीनतम गिट संस्करण काफी पुराना है, मुझे यकीन नहीं है कि यह क्या करेगा? – Nanne

+0

मैंने नोटिस नहीं किया कि गिट संस्करण कितना पुराना है, इसके बारे में खेद है। सामान्य php-cli के अलावा किसी भी विकल्प से अभी भी हाल ही में हाल ही में। मुझे डर है कि आप 5.4 से कंसोल के साथ खत्म हो जाएंगे, जब तक कि phpsh का कुछ गुप्त कांटा नहीं है जिसे मैं अनजान हूं। – Doa

+2

ठीक है, पता चला है कि मैंने गिट संस्करण का सही ढंग से परीक्षण नहीं किया था। जैसा कि लगता है, यह "\ namespace \ foo :: bar()" का समर्थन करता है, ठीक है, यह सिर्फ "नेमस्पेस \ foo :: बार()" स्वीकार नहीं करता है जो PHP स्वयं * स्वीकार करता है। यह सिर्फ एक मामूली असुविधा है, ऐसा लगता है कि मैंने गिट संस्करण को बहुत जल्दी खारिज कर दिया। मैं इसे उत्तर के रूप में चिह्नित कर रहा हूं :) – Marlies

3

मैंने पाया कि eval का उपयोग कर एक अच्छा समाधान के रूप में काम किया:

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

हां, यह एक हैक लेकिन एक आसान एक है।:)