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!