Rumah > pembangunan bahagian belakang > tutorial php > 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
Lepaskan: 2024-10-26 20:54:02
asal
268 orang telah melayarinya

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"
}
Salin selepas log masuk

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
}
Salin selepas log masuk

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);
}
Salin selepas log masuk

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!

sumber:php.cn
Kenyataan Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan