मैं सी का उपयोग कर एक PHP विस्तार विकसित कर रहा हूं, अब तक मैं तर्कों के उचित सत्यापन पर काम कर रहा हूं, PHP उपयोगकर्ता स्थान से एक्सटेंशन के फ़ंक्शन पर पास कर चुका हूं।जेड END_BEGIN_ARG_INFO_EX तर्कों की नियंत्रण संख्या को कैसे PHP एक्सटेंशन में पास किया गया है?
मैक्रो ZEND_BEGIN_ARG_INFO_EX
का उपयोग ज़ेंड इंजन को फ़ंक्शन के तर्कों के बारे में जानकारी प्रदान करने के लिए किया जा सकता है। required_num_args
नामक मैक्रो का चौथा पैरामीटर, इंजन को मेरे द्वारा इस परेशानी को दूर करने, तर्कों की संख्या को स्वचालित रूप से नियंत्रित करने दें। हालांकि, मुझे इसे काम करने का तरीका नहीं मिला: इंजन हमेशा किसी भी चेतावनी के बिना एक्सटेंशन के फ़ंक्शन को चलाता है, भले ही कोई PHP स्क्रिप्ट पर्याप्त तर्क न दे।
ZEND_BEGIN_ARG_INFO_EX(test_func_swt_arginfo, 0, 0, 3)
ZEND_ARG_INFO(1, firstArg)
ZEND_ARG_ARRAY_INFO(0, secondArg, true)
ZEND_ARG_OBJ_INFO(1, thirdArg, SomeClass, false)
ZEND_END_ARG_INFO()
यहाँ कार्यों की मेरी परिभाषा, PHP एक्सटेंशन द्वारा निर्यात है:
यहाँ समारोह तर्क की मेरी परिभाषा है
PHP_FUNCTION(sample_with_types)
{
RETURN_TRUE;
}
:
static const zend_function_entry test_func_functions[] = {
PHP_FE(sample_with_types, test_func_swt_arginfo)
PHP_FE_END
};
यहाँ मेरी समारोह है
यहां PHP स्क्रिप्ट I चलाया गया है:
<?php
sample_with_types();
अपेक्षित परिणाम: PHP त्रुटि/चेतावनी/अपवाद दिखाता है, जैसे कुछ "फ़ंक्शन पर पर्याप्त तर्क पास नहीं किए जाते हैं"; समारोह निष्पादित नहीं करता है।
वास्तविक परिणाम: फ़ंक्शन निष्पादित करता है और true
देता है।
मैं फ़ंक्शन तर्क संरचना को सही तरीके से कॉन्फ़िगर कैसे कर सकता हूं, ताकि ज़ेंड इंजन स्वचालित रूप से तर्कों की संख्या जांच सके? या क्या मैं ZEND_BEGIN_ARG_INFO_EX
मैक्रो में required_num_args
तर्क का उद्देश्य गलती करता हूं?
उस मैक्रो के उद्देश्य को स्पष्ट करने के लिए जानकारी और प्रयासों के लिए @netcoder धन्यवाद। यह बहुत अधिक समझ में आता है, और असल में मुझे पता चला कि सवाल पूछने से पहले। मुख्य, चीज, हालांकि, जिसने मेरी पहेली को जन्म दिया और मुझे एसओ में जाना पड़ा, 'required_num_args' पैरामीटर था। यह तर्क संख्या के स्वत: सत्यापन की तरह लग रहा था, लेकिन व्यवहार में यह कुछ भी नहीं करता है। क्या यह हो सकता है कि आप इसका उद्देश्य जानते हैं? –
@AndreyTserkus: 'required_num_args' का उपयोग प्रतिबिंब के लिए किया जाता है और आवश्यकतानुसार गिनती पैरामीटर को रोकने के लिए इंगित करता है (यानी, 'isOptional()' को कॉल करते समय)। इसके अलावा इसका कोई प्रभाव नहीं है। (मैंने इस जानकारी के साथ उत्तर भी अपडेट किया है।) – netcoder
बढ़िया, धन्यवाद! –