Call-Time Pass-by-Reference Deprecation in PHP
The provided code triggers the warning "Call-time pass-by-reference has been deprecated." This warning indicates that the use of call-time pass-by-reference, denoted by the & operator before variable references, is no longer supported in PHP.
Call-Time Pass-by-Reference
In older versions of PHP, call-time pass-by-reference allowed simulating the behavior of passing by reference when using pass-by-value functions. This involved prepending the variable reference with & at the call time, e.g.:
not_modified(&$x);
This allowed modifying the variable referenced by $x within the function.
Deprecation
Call-time pass-by-reference has been deprecated in subsequent versions of PHP and should not be used. Instead, variables should be explicitly passed by reference using &, e.g.:
modified($x);
Objects and Pass-by-Reference
In older versions of PHP, objects required pass-by-reference when modified within functions. However, this is no longer necessary in modern PHP versions as objects are always passed by reference by default. Therefore, the use of &$this in the provided code is redundant.
Solution
To resolve the warning, remove all instances of & from the provided code. The following is the updated code:
function XML() { $this->parser = xml_parser_create(); xml_parser_set_option($this->parser, XML_OPTION_CASE_FOLDING, false); xml_set_object($this->parser, $this); xml_set_element_handler($this->parser, 'open', 'close'); xml_set_character_data_handler($this->parser, 'data'); } function destruct() { xml_parser_free($this->parser); } function parse($data) { $this->document = array(); $this->stack = array(); $this->parent = &$this->document; return xml_parse($this->parser, $data, true) ? $this->document : NULL; }
The above is the detailed content of Why is Call-Time Pass-by-Reference Deprecated in PHP and How Can I Fix the Warning?. For more information, please follow other related articles on the PHP Chinese website!