2008-09-18 5 views
8

पायथन का सम्मेलन यह है कि वेरिएबल्स पहले असाइनमेंट द्वारा बनाए जाते हैं, और एक को असाइन किए जाने से पहले उनके मूल्य को पढ़ने की कोशिश कर रहे हैं। विपरीत रूप से PHP एक शून्य मूल्य के साथ, जब इसे पढ़ा जाता है तो एक चर बनाता है। यह PHP में यह करने के लिए आसान है का अर्थ है:पीआरएल के 'सख्त उपयोग' के PHP समकक्ष (उपयोग से पहले प्रारंभ करने के लिए चर की आवश्यकता होती है)

function mymodule_important_calculation() { 
    $result = /* ... long and complex calculation ... */; 
    return $resukt; 
} 

इस समारोह हमेशा अशक्त देता है, और अगर रिक्त है functuion लिए एक मान्य मान तो बग कुछ समय के लिए चल पाता जाना हो सकता है। पाइथन समकक्ष शिकायत करेगा कि वैरिएबल resukt का उपयोग करने से पहले इसका उपयोग किया जा रहा है।

तो ... PHP को चर असाइनमेंट के साथ कठोर होने के लिए कॉन्फ़िगर करने का कोई तरीका है?

+2

रिकॉर्ड के लिए, पर्ल में "सख्त उपयोग करें" को उपयोग से पहले परिवर्तनीय प्रारंभिकता की आवश्यकता नहीं है। यह * घोषणा * लागू करता है। –

+0

मैंने एक समान प्रश्न पूछा: [php error_reporting, विकास के लिए सर्वोत्तम सेटिंग? E_STRICT?] (Http://stackoverflow.com/questions/74847/php-errorreporting-best-setting-for-development-estrict) – SeanDowney

उत्तर

10

PHP पार्स समय पर चीजों की बहुत आगे की जांच नहीं करता है।

सबसे अच्छा आप अपनी गलतियों की रिपोर्ट करने के लिए चेतावनी स्तर को क्रैंक कर सकते हैं, लेकिन जब तक आप एक ई-नोटिस प्राप्त करते हैं, तो बहुत देर हो चुकी है, और यह अभी तक संभवतः E_NOTICES को लागू करने के लिए मजबूर नहीं कर सकता है।

बहुत से लोग "error_reporting E_STRICT" ध्वज को तोड़ रहे हैं, लेकिन यह अभी भी पीछे हटने वाली चेतावनी है, और आपके द्वारा पोस्ट की गई खराब कोड गलतियों से आपकी रक्षा नहीं करेगा।

यह मणि इस हफ्ते php-dev मेलिंग-सूची पर चालू हुआ और मुझे लगता है कि यह सिर्फ वह उपकरण है जिसे आप चाहते हैं। यह एक अधिक लिंट-चेकर है, लेकिन यह वर्तमान लिंट जांच PHP के दायरे को जोड़ता है।

PHP-Initialized Google Project

आशा व्यक्त की कि ध्यान का एक सा के साथ हम इस व्यवहार पीएचपी ही में लागू हो सकता है नहीं है। तो PHP 2 मेलिंग सूची/बग सिस्टम/फीचर अनुरोधों पर अपने 2-सेंट रखें और देखें कि क्या हम इसके एकीकरण को प्रोत्साहित कर सकते हैं।

+2

यह बहुत देर हो चुकी नहीं है, या आप दुनिया में अनचाहे कोड फेंक रहे हैं? मैं मानता हूं कि यह पार्स समय पर असफल होना बेहतर है, लेकिन कह रहा है कि यह बहुत देर हो चुकी है कि आप इसका परीक्षण भी नहीं कर रहे हैं :-) –

+2

अच्छा, यह निर्भर करता है कि आप टेस्ट केस लिख रहे हैं। और यह निर्भर करता है कि आपके परीक्षण मामलों में इसके बजाय परिवर्तनीय मिस-टाइपिंग है (जो अनजान हो जाता है)। परीक्षण मामलों के लिए अगला, परीक्षण मामले क्या हैं? –

+0

नहीं, बस यह कहकर कि यह बहुत देर हो चुकी है इसके बदले में बहुत देर हो चुकी है। हालांकि, मैं बहुत प्रासंगिक नहीं हूं। –

4

जहां तक ​​मुझे पता है, इसे विफल करने का कोई तरीका नहीं है, लेकिन त्रुटि_ रिपोर्टिंग सेटिंग में E_NOTICE के साथ आप इसे एक चेतावनी फेंक सकते हैं (ठीक है, एक नोटिस :-) लेकिन फिर भी एक स्ट्रिंग जिसे आप खोज सकते हैं)।

0

मुझे पूरा यकीन है कि यह एक त्रुटि उत्पन्न करता है यदि चर पहले घोषित नहीं किया गया था। यदि आपकी स्थापना ऐसी त्रुटियां नहीं दिखा रही है, तो अपनी php.ini फ़ाइल में error_reporting() स्तर की जांच करें।

0

आप यहां रिपोर्ट किए गए त्रुटि रिपोर्टिंग स्तर के साथ खेलने का प्रयास कर सकते हैं: http://us3.php.net/error_reporting लेकिन मुझे यकीन नहीं है कि यह गैर-आरंभिक चर के उपयोग का उल्लेख करता है, यहां तक ​​कि E_STRICT के साथ भी।

1

त्रुटि रिपोर्टिंग की जांच करें, http://php.net/manual/en/function.error-reporting.php

क्या आप चाहते हैं शायद E_STRICT है। बस ध्यान में रखें कि PHP के पास कोई नामस्थान नहीं है, और त्रुटि रिपोर्टिंग वैश्विक बन जाती है। अगर आप डेवलपर्स से किसी तृतीय पक्ष लाइब्रेरी का उपयोग करते हैं तो आपको बेकार होने का तरीका है जिस पर त्रुटि रिपोर्टिंग स्विच नहीं हुई है।

0

कुछ ऐसा ही है: PHP में आप त्रुटि रिपोर्टिंग स्तर बदल सकते हैं। इसे एक देव वातावरण में अधिकतम सेट करने का सबसे अच्छा अभ्यास है। ऐसा करने के लिए:

अपने PHP में जोड़ें।आरं:

error_reporting = E_ALL 

या फिर आप फ़ाइल आपके के शीर्ष पर इस जोड़ सकते हैं पर काम कर रहे:

error_reporting(E_ALL); 

यह चलने से अपने कोड पर रोक नहीं लगेगी लेकिन चर असाइनमेंट की कमी को प्रदर्शित करेगा आपके ब्राउज़र में एक बहुत ही स्पष्ट त्रुटि संदेश।

+1

PHP6 से पहले, आपको E_ALL | की आवश्यकता है E_STRICT, अन्यथा आपको उनमें से "सभी" नहीं मिल रहे हैं। :) –

0

यदि आप फ़ाइलों पर "विश्लेषण कोड" का उपयोग करते हैं, या ज़ेंड स्टूडियो में आपकी प्रोजेक्ट का उपयोग करते हैं तो यह आपको किसी भी अनियमित चर के बारे में चेतावनी देगा (इससे वास्तव में कोड के शायद ही कभी इस्तेमाल किए गए हिस्सों में छिपे हुए गलत वर्तनी चर के एक टन को खोजने में मदद मिली त्रुटियों का पता लगाने में बहुत मुश्किल है)। शायद कोई उस कार्यक्षमता को PHP लिंट फ़ंक्शन (php -l) में जोड़ सकता है, जो वर्तमान में सिंटैक्स त्रुटियों के लिए केवल जांच करता है।

संबंधित मुद्दे

 संबंधित मुद्दे