Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Mengapa Tanda Kurung Membetulkan Ralat \"Hanya Pembolehubah Harus Dilalui Melalui Rujukan\" dalam Panggilan Fungsi PHP?

Mengapa Tanda Kurung Membetulkan Ralat \"Hanya Pembolehubah Harus Dilalui Melalui Rujukan\" dalam Panggilan Fungsi PHP?

Linda Hamilton
Linda Hamiltonasal
2024-10-26 20:54:02151semak imbas

Why do Parentheses Fix

Kurungan dan Maksud Keputusan Panggilan Fungsi

Pertimbangkan contoh berikut:

<?php
function get_array() {
    return array();
}

function foo() {
    return reset(get_array()); // Error: "Only variables should be passed by reference"
}

Dalam kod ini, ralat berlaku kerana hasil panggilan fungsi bukan rujukan. Walau bagaimanapun, jika hasilnya dibalut dalam kurungan, ralat itu hilang:

function foo() {
    return reset((get_array())); // OK
}

Apa yang berlaku di sini?

Walaupun tiada dokumentasi yang menerangkan tingkah laku ini secara eksplisit, ia boleh difahami dengan memeriksa tatabahasa PHP dan pelaksanaan pengkompil.

Kesan pada Penghuraian

Kurungan menyebabkan penghurai PHP mentafsir hasil panggilan fungsi sebagai ungkapan dan bukannya pembolehubah. Ini mempengaruhi cara pengkompil mentafsir kod, terutamanya opcode yang digunakan untuk menghantar pembolehubah kepada fungsi.

Kira Rujukan dan Pengoptimuman Enjin Zend

Enjin Zend, enjin teras PHP , membenarkan pembolehubah bukan rujukan dengan kiraan rujukan 1 untuk digunakan di mana rujukan dijangkakan. Dalam contoh di atas, tatasusunan yang dikembalikan ialah objek baharu dengan kiraan rujukan 1. Ini membolehkan Enjin Zend mengoptimumkan kod dan mengelakkan mesej ralat.

Penghadan

Perlu ambil perhatian bahawa tingkah laku ini dianggap sebagai pepijat dan tidak boleh dipercayai. Kiraan rujukan hasil panggilan fungsi mungkin berubah dalam versi PHP akan datang, memecahkan kod yang bergantung pada tingkah laku ini.

Penyelesaian Alternatif

Untuk mengelakkan bergantung pada ini yang berpotensi tidak stabil tingkah laku, tetapkan secara eksplisit hasil panggilan fungsi kepada pembolehubah:

function foo() {
    $result = get_array();
    return reset($result);
}

Atas ialah kandungan terperinci Mengapa Tanda Kurung Membetulkan Ralat \"Hanya Pembolehubah Harus Dilalui Melalui Rujukan\" dalam Panggilan Fungsi PHP?. 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