Home > Backend Development > PHP Tutorial > Why is Call-Time Pass-by-Reference Deprecated in PHP and How Can I Fix the Warning?

Why is Call-Time Pass-by-Reference Deprecated in PHP and How Can I Fix the Warning?

Mary-Kate Olsen
Release: 2024-11-28 16:41:15
Original
368 people have browsed it

Why is Call-Time Pass-by-Reference Deprecated in PHP and How Can I Fix the Warning?

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);
Copy after login

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);
Copy after login

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;
}
Copy after login

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!

source:php.cn
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Latest Articles by Author
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template