2010-10-11 24 views
12

के अंदर शामिल/आवश्यकता की PHP व्यवहार यदि मैं या require कथन को 0 सशर्त के अंदर false पर मूल्यांकन करता हूं, तो क्या PHP दुभाषिया फ़ाइल को पूरी तरह से शामिल कर देगा, या यह केवल मामले में लोड करेगा?सशर्त

एक उदाहरण होगा:

if ($some_user_var) { 
    require 'this.php'; 
} else { 
    //do stuff 
} 

मैंने कहीं पढ़ा है कि require हमेशा दुभाषिया द्वारा सशर्त की परवाह किए बिना शामिल किया जाएगा, लेकिन include नहीं होगा। यदि ऐसा है, तो बस require से include पर स्विचिंग का मतलब कम I/O और पार्सिंग ओवरहेड के कारण एक फ्री स्पीडअप हो सकता है।

यदि मैं ईएक्सेलेरेटर जैसे प्रीप्रोसेसर चला रहा हूं तो शायद यह एक फर्क पड़ता है, लेकिन मान लीजिए कि मैं नहीं करता हूं।

+0

मुझे लगता है कि जो कुछ आपने पढ़ा था वह कुछ ऐसा था: 'आवश्यकता' घातक त्रुटि के साथ निष्पादन को रोक देगा जबकि 'शामिल' नहीं होगा (असफलता पर)। जिसे 'आवश्यकता' की तरह व्याख्या की जा सकती है, हमेशा आपकी फ़ाइल या स्क्रिप्ट मर जाएगी। – acm

+0

क्या आप इस पुस्तक के मालिक हैं? http://www.amazon.co.uk/PHP-World-Wide-Web-Quickstart/dp/0321245652 मुझे यह झूठ भी सिखाया गया था! – Matthew

उत्तर

20

यह स्थिति केवल तभी शामिल की जाएगी जब स्थिति सही है। मुझे नहीं पता कि आप कहां पढ़ते हैं, लेकिन वे गलत हैं।

include और require के बीच फर्क सिर्फ इतना है कि अगर यह विफल include एक चेतावनी फेंक जाएगा, जबकि require एक गंभीर त्रुटि फेंक नहीं है।

इसकी पुष्टि करने के लिए, the PHP manual page for require देखें।

(ps - अगर आप सशर्त कर रहे हैं, भी शामिल है क्या reaon है पर निर्भर करता है, आप के बजाय include_once() या require_once() उपयोग करने पर विचार कर सकते हैं)

+1

आईआईआरसी, जिस व्यवहार का वह वर्णन करता है वह PHP 4 के मामले में होता है। कुछ। –

+0

ओह, मैं वास्तव में requ_once का उपयोग कर रहा हूं, मैंने सिर्फ प्रश्न के लिए सरलीकृत किया है। लेकिन धन्यवाद –

+0

मैनुअल पेज के लिंक के लिए धन्यवाद। टिप्पणियों में से एक: "जैसा कि मैन्युअल राज्यों की आवश्यकता होती है और PHP 4.02 के रूप में आवश्यक है, अब फ़ाइल को कॉल नहीं करते हैं, यदि कोड की रेखा को निष्पादित नहीं किया जाना चाहिए"। बिल्कुल सही :) –

1

यह सही नहीं है। require उन फ़ाइलों को शामिल नहीं करेगा जो ब्लॉक में लिपटे हैं जहां उन्हें कभी नहीं कहा जाता है, php दुभाषिया उन्हें अनदेखा नहीं करता है। include और require में प्रदर्शन के विपरीत कोई अंतर नहीं है (उस मामले के लिए न तो उनके पास _once से बहुत अंतर है, हालांकि यह अधिक महत्वपूर्ण है)।

1

मैंने कहीं भी है कि पढ़ा। तर्क इस तरह कुछ जाता है:

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

फिर भी, यदि आप एक PHP फ़ाइल के आसपास एक त्रुटि को एक त्रुटि के साथ लपेटते हैं, तो यह इसे तोड़ नहीं देता है। और यदि आप किसी फ़ाइल में एक चर को घोषित करते हैं और फिर यह निर्धारित करने के लिए चर के मान का उपयोग करते हैं कि यह शामिल है या नहीं, तो यह उसका मूल्य नहीं उठाता है :)

शायद यह पुराने संस्करणों में एक समस्या थी PHP का?

मैंने लोड की गति और रैम उपयोग के संबंध में इसका परीक्षण नहीं किया है - लेकिन मुझे इसका एक निश्चित उत्तर प्राप्त करना अच्छा लगेगा। क्या सशर्त के साथ शामिल कोई ओवरहेड शामिल है?

+0

उनमें त्रुटियों वाली फ़ाइलों को शामिल करने के बारे में अच्छा अवलोकन। अगर यह उन्हें प्रीलोड कर रहा था तो आप एक विस्फोटक खराब फ़ाइल को शामिल करके परीक्षण कर पाएंगे। – Frug