Operator Nullsafe ( ?->
) dalam Php 8 adalah ciri yang kuat yang direka untuk mengendalikan nilai-nilai null yang berpotensi dengan anggun dalam panggilan harta atau kaedah. Sebelum Php 8, mengakses sifat atau kaedah objek yang berpotensi null akan membawa kepada E_NOTICE
maut atau bahkan E_ERROR
jika objek itu adalah batal. Ini memerlukan pemeriksaan null yang rumit menggunakan pernyataan bersyarat ( if
pernyataan). Pengendali nullsafe dengan elegan menyelesaikan ini dengan litar pintas rantai jika mana-mana elemen pertengahan adalah batal.
Sebagai contoh, pertimbangkan kod ini tanpa pengendali nullsafe:
<🎝🎝🎝> Jika getUser()
mengembalikan null
, kod di atas akan membuang ralat. Dengan pengendali nullsafe, kod yang sama menjadi:
Jika $user
null
, ungkapan segera berhenti menilai, dan $address
akan menjadi null
. Tiada kesilapan dilemparkan. Ini menghalang kesilapan yang tidak dijangka dan menjadikan kod lebih mantap. Pengendali nullsafe secara tersirat mengendalikan pemeriksaan null
pada setiap langkah rantai. Jika mana-mana bahagian rantai adalah null
, keseluruhan litar pintas, kembali null
tanpa menyebabkan kesilapan. Ini dengan ketara mengurangkan keperluan bersarang if
pernyataan dan meningkatkan kejelasan kod.
Walaupun pengendali nullsafe adalah peningkatan yang ketara dan boleh menggantikan banyak pemeriksaan null tradisional, ia tidak sepenuhnya menghapuskan keperluan untuk mereka dalam semua situasi. Pengendali nullsafe sangat sesuai untuk akses harta atau kaedah dirantai di mana nilai null
pada mana -mana titik dalam rantaian harus menghasilkan nilai null
untuk keseluruhan ungkapan. Walau bagaimanapun, ia bukan pengganti langsung untuk semua pemeriksaan null.
Pertimbangkan senario di mana anda perlu melakukan tindakan yang berbeza bergantung kepada sama ada objek adalah batal atau tidak. Contohnya:
<🎝🎝🎝>Dalam kes ini, pemeriksaan null tradisional masih diperlukan sebelum menggunakan pengendali nullsafe untuk mengendalikan senario di mana pengguna tidak dijumpai. Pada asasnya, pengendali nullsafe cemerlang untuk memudahkan akses harta/kaedah rantaian, tetapi ia tidak sepatutnya menggantikan semua contoh pemeriksaan null; Sebaliknya ia harus melengkapkan mereka jika sesuai.
Perbezaan prestasi antara pengendali nullsafe dan pemeriksaan nol tradisional biasanya diabaikan dalam kebanyakan aplikasi dunia nyata. Pelaksanaan dalaman pengendali Nullsafe sangat dioptimumkan. Walaupun terdapat sedikit overhead yang terlibat dalam mekanisme litar pintas, ia biasanya kerdil oleh masa yang dibelanjakan untuk pertanyaan pangkalan data, permintaan rangkaian, atau operasi I/O lain dalam aplikasi web biasa.
Dalam tanda-tanda mikro, anda mungkin melihat sedikit perbezaan prestasi, tetapi perbezaan ini tidak mungkin kelihatan atau memberi kesan dalam konteks aplikasi yang lebih besar. Pembacaan dan kebolehkerjaan yang semakin meningkat dengan ketara melebihi penalti prestasi kecil. Oleh itu, mengutamakan kejelasan kod dan pemeliharaan apabila memilih antara pengendali nullsafe dan pemeriksaan null tradisional, kerana perbezaan prestasi tidak penting dalam kebanyakan kes.
Pengendali nullsafe adalah yang paling berkesan apabila digunakan untuk akses harta atau kaedah dirantai di mana nilai null dalam rantai harus dengan anggun menghasilkan nilai null untuk keseluruhan ungkapan. Ini dengan ketara mengurangkan bersarang penyata bersyarat dan meningkatkan kebolehbacaan kod.
Berikut adalah beberapa amalan terbaik:
??
): Gunakan pengendali coalescing null untuk memberikan nilai lalai jika ekspresi nullsafe mengembalikan null. Ini meningkatkan pengendalian data yang hilang. Sebagai contoh: $city = $user?->getAddress()?->getCity() ?? 'Unknown';
Dengan mengikuti amalan terbaik ini, anda boleh menggunakan pengendali Nullsafe secara berkesan untuk menulis kod PHP yang lebih bersih, lebih banyak dipelihara, dan kurang rawan. Ingat bahawa walaupun ia adalah alat yang berkuasa, ia bukan peluru perak untuk semua senario pengendalian null. Gunakannya dengan bijak dan bersempena dengan pemeriksaan null tradisional di mana perlu.
Atas ialah kandungan terperinci Apakah pengendali nullsafe dalam Php 8 dan bagaimanakah ia menghalang kesilapan?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!