में संदर्भ द्वारा एक चर पारित करना मैं एक PHP एक्सटेंशन लिख रहा हूं जो किसी मान का संदर्भ लेता है और इसे बदल देता है। उदाहरण PHP:एक PHP एक्सटेंशन
$someVal = "input value";
TestPassRef($someVal);
// value now changed
सही दृष्टिकोण क्या है?
में संदर्भ द्वारा एक चर पारित करना मैं एक PHP एक्सटेंशन लिख रहा हूं जो किसी मान का संदर्भ लेता है और इसे बदल देता है। उदाहरण PHP:एक PHP एक्सटेंशन
$someVal = "input value";
TestPassRef($someVal);
// value now changed
सही दृष्टिकोण क्या है?
संपादित 2011-09-13: - Extending and Embedding PHP chapter 6 (Sara Golemon, Developer's Library) देख यह करने के लिए सही तरीका मैक्रो की ZEND_BEGIN_ARG_INFO()
परिवार का प्रयोग है।
यह उदाहरण फ़ंक्शन मान द्वारा एक स्ट्रिंग तर्क लेता है (ZEND_ARG_PASS_INFO(0)
कॉल के कारण) और संदर्भ के बाद अन्य सभी (ZEND_BEGIN_ARG_INFO
के दूसरे तर्क के कारण 1)।
const int pass_rest_by_reference = 1;
const int pass_arg_by_reference = 0;
ZEND_BEGIN_ARG_INFO(AllButFirstArgByReference, pass_rest_by_reference)
ZEND_ARG_PASS_INFO(pass_arg_by_reference)
ZEND_END_ARG_INFO()
zend_function_entry my_functions[] = {
PHP_FE(TestPassRef, AllButFirstArgByReference)
};
PHP_FUNCTION(TestPassRef)
{
char *someString = NULL;
int lengthString = 0;
zval *pZVal = NULL;
if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "sz", &someString, &lengthString, &pZVal) == FAILURE)
{
return;
}
convert_to_null(pZVal); // Destroys the value that was passed in
ZVAL_STRING(pZVal, "some string that will replace the input", 1);
}
(मैं नहीं है कि क्या यह ZENG_ARG_INFO()
कॉल जोड़ने के बाद आवश्यक है है) हर कॉल पर convert_to_null
यह रिसाव करेगा स्मृति जोड़ने से पहले।
धन्यवाद, इससे मुझे बहुत मदद मिली! :) – hek2mgl