Mengapa Atribut PHP Tidak Boleh Menggunakan Fungsi?
Dalam PHP, nilai lalai atribut tidak boleh menggabungkan panggilan fungsi, sekatan yang mungkin menimbulkan persoalan tentang pelaksanaannya. Artikel ini menyelidiki asas teknikal pilihan reka bentuk ini.
Rasional
Kod pengkompil menunjukkan bahawa had ini adalah disengajakan, tetapi alasannya tidak didedahkan. Meneliti proses penyusunan memberikan beberapa cerapan.
Proses Penyusunan
Apabila menghuraikan pengisytiharan pembolehubah kelas, pengkompil mengikuti tatabahasa tertentu. Tugasan mesti mematuhi definisi skalar statik. Tatasusunan dalam takrifan ini juga mesti mengandungi skalar statik.
Jika tatabahasa membenarkan tatasusunan bukan statik, kod itu akan lulus semakan sintaks. Walau bagaimanapun, ia akan mengakibatkan ralat penyusunan "Jenis pengikatan tidak sah" semasa peringkat pengikatan awal, yang memastikan bahawa opcode terakhir pada tatasusunan semasa sepadan dengan jenis tertentu.
Opcode Bermasalah
Apabila menetapkan tatasusunan bukan statik, pengkompil menjana opcode tambahan, seperti INIT_ARRAY dan DO_FCALL. Opkod ini menyebabkan ketidakpadanan semasa pengikatan awal, mencetuskan ralat.
Mungkin Penyelesaian dan Cabaran Pelaksanaan
Bahasa dinamik lain mengendalikan senario sedemikian. Penyelesaian yang berpotensi untuk PHP termasuk:
Melaksanakan penyelesaian ini memerlukan pertimbangan yang teliti dan perubahan yang tidak remeh kepada pengkompil.
Kesimpulan
Ketidakupayaan untuk menggunakan fungsi dalam atribut PHP berpunca daripada keputusan reka bentuk dalam proses penyusunan. Walaupun ini mungkin kelihatan seperti batasan, ia nampaknya merupakan pilihan yang sedar oleh pereka bahasa. Melaksanakan penyelesaian alternatif memerlukan penstrukturan semula yang ketara dalam proses penyusunan, yang mungkin tidak dianggap sebagai keutamaan.
Atas ialah kandungan terperinci Mengapa Atribut PHP Tidak Boleh Menyokong Fungsi Invocation?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!