2017-10-12 12 views
6

मैं php.net पर प्रलेखन पढ़कर PHP का उपयोग और यह सीखने के लिए नया हूँ - वर्तमान के लिए assert() और assert_options() कार्यों उन ज़ोर के बारे में पता करने के लिए() लेकिन यह क्यों की व्याख्या नहीं करता पेज हम उनका उपयोग करते हैं और ये कार्य सरल शब्दों में क्या करते हैं। क्या कोई यह बता सकता है कि ये कार्य क्या करते हैं और हम उन्हें PHP में क्यों उपयोग करते हैं?हम php में assert() और assert_options() का उपयोग क्यों करते हैं?

+0

संभावित डुप्लिकेट [क्या मुझे अपने PHP कोड में जोर देना चाहिए?] (Https://stackoverflow.com/questions/4516419/should-i-be-using-assert-in-my-php-code) – user1506104

+0

अनुशंसित देखने: पूर्व शर्त, आवेषण और रक्षात्मक प्रोग्रामिंग पर [जॉन लेकोस टॉक * रक्षात्मक प्रोग्रामिंग पूर्ण हो गया *] (https://www.youtube.com/watch?v=1QhtXRMp3Hg)। हालांकि यह एक सी ++ बात है, विचार किसी भी प्रोग्रामिंग भाषा पर लागू होते हैं और जॉन उस विषय के सबसे सटीक विवरणों में से एक देता है जो मुझे पता है। – ComicSansMS

उत्तर

6

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

<?php 
    print "Stage 1\n"; 
    assert(1 == 1); 
    print "Stage 2\n"; 
    assert(1 == 2); 
    print "Stage 3\n"; 
?> 

यहाँ हम पहली कॉल जोर देते हुए कि एक के बाद एक के बराबर होना चाहिए, और दूसरी कॉल जोर देते हुए कि एक से दो के बराबर होना चाहिए के साथ दो assert() रों है,। चूंकि 1 और 2 जैसे स्थिरांक को फिर से परिभाषित करना असंभव है, पहले assert() हमेशा सत्य का मूल्यांकन करेंगे, और दूसरा हमेशा झूठे मूल्यांकन करेगा।

स्टेज 1 स्टेज 2 चेतावनी: ज़ोर()

[http://www.php.net/function.assert]: अभिकथन रेखा 5

पर /home/paul/sandbox/php/assert.php में विफल रहा है यहाँ स्क्रिप्ट से आउटपुट है

स्टेज 3

ध्यान दें कि पहले assert() उत्पादन में बिल्कुल, क्योंकि यह true को मूल्यांकन नहीं देखा जाता है, जबकि दूसरे assert() evalu false पर ध्यान दिया गया, इसलिए हमें warningassertion failure के बारे में पता चला। यह भी ध्यान रखें कि हम "Stage 3" को failure warning के बाद देखते हैं, क्योंकि स्क्रिप्ट विफलता के बाद निष्पादन पर चलती है। जब तक दावा सही साबित होते हैं, उनके पास स्क्रिप्ट के चलने पर कोई प्रभाव नहीं पड़ता है, जिसका अर्थ है कि आप उन्हें डिबगिंग उद्देश्यों के लिए सम्मिलित कर सकते हैं और डिबगिंग समाप्त होने के बाद उन्हें बाहर निकालने की चिंता न करें।


आप अपने दावे निष्पादन धीमा है, जो है, हालांकि गति हिट कम से कम हो जाएगा, जो अभी और एक वैध चिंता का विषय है, तो आप assert_options() फ़ंक्शन का उपयोग करके या करने के लिए assert.active की स्थापना करके assert() के निष्पादन निष्क्रिय कर सकते हैं के बारे में चिंतित हैं, तो अपनी php.ini फ़ाइल में बंद करें। यदि आप assert_options() का उपयोग करना चाहते हैं, तो इसमें दो पैरामीटर लगते हैं - सेट करने का विकल्प और जिस मूल्य को आप इसे सेट करना चाहते हैं - और कई तरीकों से यह ज़ोरदार() अधिक शक्तिशाली बना सकता है। enter image description here

ध्यान दें कि इन विकल्पों में से सभी अपने php.ini फ़ाइल में सेट किया जा सकता है ताकि वे प्रभाव में हमेशा से रहे - कुंजी विकल्पों को बदलने के assert.active, assert.warning, assert.bail, assert.quiet_eval, and assert_callback हैं।

ASSERT_CALLBACK एक बहुत ही उपयोगी विकल्प है क्योंकि यह आपके कोड को दावा करने में विफल होने पर आपको एक त्रुटि हैंडलर लिखने की अनुमति देता है। जब फ़ंक्शन विफल हो जाते हैं तो निष्पादित करने के लिए फ़ंक्शन का स्ट्रिंग नाम लेता है, और आपके द्वारा परिभाषित फ़ंक्शन को तीन पैरामीटर लेना चाहिए - एक फ़ाइल को धारण करने के लिए, जहां कोई दावा होता है, एक लाइन को पकड़ने के लिए, और अभिव्यक्ति को पकड़ने के लिए। अपने कॉलबैक फ़ंक्शन में सभी तीनों का एक साथ उपयोग करने से आप सार्थक त्रुटि संदेश उत्पन्न कर सकते हैं जिन्हें आप आसानी से डीबग कर सकते हैं।इस कोड स्निपेट पर विचार करें:

<?php 
    function assert_failed($file, $line, $expr) { 
     print "Assertion failed in $file on line $line: $expr\n"; 
    } 

    assert_options (ASSERT_CALLBACK, 'assert_failed'); 
    assert_options (ASSERT_WARNING, 0); 

    $foo = 10; 
    $bar = 11; 
    assert('$foo > $bar'); 
?> 

रेफरी: आधिकारिक दस्तावेज से http://www.hackingwithphp.com/19/8/3/making-assertions


उदाहरण

assert_options - सेट/विभिन्न ज़ोर झंडे

उदाहरण # पाने 1 assert_options() उदाहरण

<?php 
// This is our function to handle 
// assert failures 
function assert_failure() 
{ 
    echo 'Assert failed'; 
} 

// This is our test function 
function test_assert($parameter) 
{ 
    assert(is_bool($parameter)); 
} 

// Set our assert options 
assert_options(ASSERT_ACTIVE, true); 
assert_options(ASSERT_BAIL,  true); 
assert_options(ASSERT_WARNING, false); 
assert_options(ASSERT_CALLBACK, 'assert_failure'); 

// Make an assert that would fail 
test_assert(1); 

// This is never reached due to ASSERT_BAIL 
// being true 
echo 'Never reached'; 
?> 

php documetnation अनुसार assert()

  1. अभिकथन एक स्ट्रिंग यह assert() द्वारा PHP कोड के रूप में मूल्यांकन किया जाएगा रूप दिया जाता है।
  2. यदि आप दावा के रूप में एक बुलियन स्थिति पास करते हैं, तो यह स्थिति assert_options() के साथ परिभाषित किए गए दावे समारोह के पैरामीटर के रूप में दिखाई नहीं देगी। स्थिति को हैंडलर फ़ंक्शन को कॉल करने से पहले एक स्ट्रिंग में परिवर्तित किया जाता है, और बूलियन FALSE है खाली स्ट्रिंग के रूप में परिवर्तित।
  3. Assertions को केवल debugging सुविधा के रूप में उपयोग किया जाना चाहिए। आप उन लोगों के लिए उपयोग कर सकते हैं जो सैनिटी-चेक के लिए परीक्षण करते हैं जो हमेशा सत्य होने के लिए परीक्षण करते हैं और जो कुछ प्रोग्रामिंग त्रुटियों को इंगित करते हैं, यदि एक्सटेंशन फ़ंक्शंस या कुछ सिस्टम सीमाओं और सुविधाओं जैसे कुछ विशेषताओं की उपस्थिति की जांच नहीं करते हैं।
  4. Assertions सामान्य रनटाइम ऑपरेशंस जैसे input parameter चेक के लिए उपयोग नहीं किया जाना चाहिए। अंगूठे के नियम के रूप में यदि आपका दावा सक्रिय नहीं किया जाता है तो आपका कोड हमेशा सही ढंग से काम करने में सक्षम होना चाहिए।
  5. assert() के व्यवहार assert_options() द्वारा या .ini-settings कि में वर्णित द्वारा विन्यस्त किया जा सकता है मैनुअल page.The assert_options() समारोह और/या ASSERT_CALLBACK विन्यास निर्देश अनुमति देने के एक कॉलबैक फ़ंक्शन में विफल रहा है दावे को संभालने के लिए स्थापित किया जाना कार्य करता है। 6. assert() कॉलबैक स्वचालित परीक्षण सूट बनाने के लिए विशेष रूप से उपयोगी होते हैं क्योंकि वे दावा के लिए पारित कोड को आसानी से कैप्चर करने की अनुमति देते हैं, साथ ही कहां दावा किया गया था। हालांकि इस जानकारी को अन्य विधियों के माध्यम से पकड़ा जा सकता है, लेकिन दावाों का उपयोग करके यह बहुत तेज और आसान बनाता है!
+1

"ASSERT_CALLBACK एक बहुत ही उपयोगी विकल्प है क्योंकि यह आपको एक कोड हैंडलर लिखने की अनुमति देता है जब आपका कोड किसी दावे में विफल रहता है। जब फ़ंक्शन विफल हो जाते हैं तो निष्पादित करने के लिए फ़ंक्शन का स्ट्रिंग नाम लेता है [...]" <- यह गलत है । दस्तावेज कहता है "असफल दावों पर कॉल करने के लिए कॉलबैक"। इसका मतलब है कि 'ASSERT_CALLBACK' [किसी भी कॉल करने योग्य] ले सकता है (http://php.net/manual/en/language.types.callable.php)। इसका मतलब यह है कि आप गुमनाम कार्यों और कुछ भी पारित कर सकते हैं जिन्हें फ़ंक्शन की तरह कहा जा सकता है। –

3

assert() फ़ंक्शन यह सुनिश्चित करने का एक अच्छा तरीका है कि आपके कोड के पूरे जीवन में कुछ स्थितियां सत्य हों। पॉल हडसन द्वारा this article के शब्दों में: मूलतः

, जोर() कहने के लिए "- अगर यह नहीं है, कृपया मुझे बताओ यह बयान सही होना चाहिए" प्रयोग किया जाता है।

जैसे PHP स्क्रिप्ट निष्पादन न खत्म होने वाली है जब एक अभिकथन विफल रहता दावे से निपटने सक्षम करने के लिए, assert_options(ASSERT_ACTIVE) उपयोग करें, और भी अन्य तर्क के साथ assert_options() का उपयोग क्या होता है जब दावे विफल नियंत्रित करने के लिए (एक हैंडलर समारोह जो इस्तेमाल किया जा सकता बुला ईमेल भेजने के लिए, फाइलों और/या डेटाबेस टेबल, आदि में डेटा लॉग इन करें)। सभी विकल्पों और उनके परिणामों की सूची के लिए parameters अनुभाग का संदर्भ लें।

this playground example में कुछ विकल्पों को आज़माएं।

उन दोनों कार्यों के बारे में अधिक जानकारी के लिए that article पढ़ें।

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