Rumah >pembangunan bahagian belakang >tutorial php >Mengapa Rujukan Laluan-Masa Panggilan Dihentikan dalam PHP dan Bagaimana Saya Boleh Membetulkan Amaran?

Mengapa Rujukan Laluan-Masa Panggilan Dihentikan dalam PHP dan Bagaimana Saya Boleh Membetulkan Amaran?

Mary-Kate Olsen
Mary-Kate Olsenasal
2024-11-28 16:41:15302semak imbas

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

Pemberhentian Rujukan Laluan Masa Panggilan dalam PHP

Kod yang disediakan mencetuskan amaran "Rujukan pas-by-masa panggilan telah ditamatkan." Amaran ini menunjukkan bahawa penggunaan rujukan pas masa panggilan, dilambangkan oleh & operator sebelum rujukan pembolehubah, tidak lagi disokong dalam PHP.

Rujukan Laluan Masa Panggilan

Dalam versi PHP yang lebih lama, rujukan pas-demi masa panggilan membenarkan mensimulasikan tingkah laku lulus melalui rujukan apabila menggunakan nilai pas-demi- fungsi. Ini melibatkan pendahuluan rujukan pembolehubah dengan & pada masa panggilan, cth.:

not_modified(&$x);

Ini membenarkan mengubah suai pembolehubah yang dirujuk oleh $x dalam fungsi.

Penangguhan

Rujukan pas masa panggilan telah ditamatkan dalam versi PHP seterusnya dan tidak boleh digunakan. Sebaliknya, pembolehubah harus diluluskan secara eksplisit melalui rujukan menggunakan &, cth.:

modified($x);

Objek dan Rujukan Laluan

Dalam versi PHP yang lebih lama, objek diperlukan rujukan lewat apabila diubah suai dalam fungsi. Walau bagaimanapun, ini tidak lagi diperlukan dalam versi PHP moden kerana objek sentiasa diluluskan dengan rujukan secara lalai. Oleh itu, penggunaan &$this dalam kod yang disediakan adalah berlebihan.

Penyelesaian

Untuk menyelesaikan amaran, alih keluar semua kejadian & daripada kod yang disediakan. Berikut ialah kod yang dikemas kini:

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;
}

Atas ialah kandungan terperinci Mengapa Rujukan Laluan-Masa Panggilan Dihentikan dalam PHP dan Bagaimana Saya Boleh Membetulkan Amaran?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn