Mengapa Membungkus Panggilan Fungsi dalam Kurungan Mengubahnya menjadi Ungkapan dalam PHP?

Barbara Streisand
Lepaskan: 2024-10-31 07:45:02
asal
485 orang telah melayarinya

Why Does Wrapping a Function Call in Parentheses Transform it into an Expression in PHP?

Kurungan Mengubah Hasil Panggilan Fungsi kepada Ungkapan

Dalam PHP, membalut hasil panggilan fungsi dalam kurungan secara mengejutkan boleh mengubah hasilnya menjadi полноценное выражение, seperti yang dilihat dalam contoh berikut:

<?php

function get_array() {
   return array();
}

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

foo();
Salin selepas log masuk

Kod di atas berfungsi tanpa ralat, walaupun tiada penjelasan yang jelas dalam dokumentasi. Mari kita siasat tingkah laku ini secara terperinci.

Syarat Pertama: Argumen Panggilan Bukan Fungsi

Disebabkan kurungan tambahan, PHP tidak lagi mengenal pasti argumen sebagai panggilan fungsi tetapi sebagai "expr_without_variable." Perubahan dalam penghuraian ini mempengaruhi cara kod disusun, akhirnya mengalih keluar bendera "panggilan fungsi" daripada opcode "SEND_VAR_NO_REF".

Syarat Kedua: Bilangan Rujukan 1

Enjin Zend kadangkala membenarkan bukan rujukan dengan kiraan rujukan 1 di mana rujukan dijangkakan. Dalam contoh ini, tatasusunan yang dikembalikan mempunyai kiraan rujukan 1, memenuhi syarat ini. Walau bagaimanapun, jika tatasusunan dirujuk dari tempat lain, syarat kedua tidak akan dipenuhi, mengakibatkan ralat.

Kesimpulan

Walaupun tingkah laku ini kelihatan mudah, ia tetap penting untuk ambil perhatian bahawa ia bukan ciri yang didokumenkan dan harus dianggap sebagai pepijat yang mungkin. Bergantung padanya boleh memperkenalkan ralat yang tidak dijangka dan ketidakstabilan dalam kod. Oleh itu, adalah sangat disyorkan untuk mengelakkan sintaks ini dan sebaliknya menggunakan ungkapan yang betul untuk mengelakkan kekaburan dan memastikan hasil yang boleh diramal.

Atas ialah kandungan terperinci Mengapa Membungkus Panggilan Fungsi dalam Kurungan Mengubahnya menjadi Ungkapan dalam 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