Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Mengapa Membungkus Panggilan Fungsi dalam Kurungan Mengubahnya menjadi Ungkapan dalam PHP?

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

Barbara Streisand
Barbara Streisandasal
2024-10-31 07:45:02410semak imbas

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();

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!

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