Semasa proses pembangunan PHP, kami sering menggunakan kelas untuk merangkum kod untuk mencapai organisasi dan penggunaan semula yang lebih baik. Untuk kelas, kita hanya perlu memperkenalkannya apabila perlu, dan kemudian kita boleh mencipta objek dan menggunakannya. Tetapi, pernahkah anda terfikir bahawa setiap kelas hanya perlu dimuatkan sekali sahaja? Jika tidak, apakah akibatnya?
Pertama, mari kita lihat proses kelas yang dimuatkan. Dalam PHP, kita boleh menggunakan memerlukan atau menyertakan fungsi untuk memuatkan fail kelas, contohnya:
require_once 'path/to/MyClass.php';
Apabila pernyataan ini dilaksanakan, PHP akan membaca kod dalam fail MyClass.php, Dan menghuraikan dan menyusun kelas yang ditakrifkan di dalamnya. Apabila kita memanggil kelas ini sekali lagi di tempat lain dan mencipta objek, PHP akan mendapati bahawa kelas ini telah dihuraikan dan disusun, jadi ia akan menggunakan hasil sebelumnya secara langsung tanpa menghuraikan dan menyusun.
Mekanisme ini nampaknya sangat cekap, kerana setiap kelas hanya perlu diproses sekali. Tetapi apa yang berlaku jika kita cuba memuatkan kelas beberapa kali dalam skrip yang sama? Mari cuba:
require_once 'path/to/MyClass.php'; require_once 'path/to/MyClass.php'; $obj1 = new MyClass(); $obj2 = new MyClass(); echo ($obj1 === $obj2) ? 'same' : 'different';
Dalam contoh ini, kami memuatkan fail kelas yang sama dua kali berturut-turut dan mencipta dua objek. Kemudian kita tentukan sama ada kedua-dua objek adalah sama, dan jika ya, keluarkan 'sama', sebaliknya keluarkan 'berbeza'.
Jika kelas hanya boleh dimuatkan sekali, kami menjangkakan untuk mengeluarkan 'sama', tetapi sebenarnya ia mengeluarkan 'berbeza'! Ini kerana apabila kelas yang sama dimuatkan untuk kali kedua, PHP akan mengabaikan keputusan yang disusun sebelum ini dan menyusunnya semula, menyebabkan objek akhir yang dicipta bukanlah contoh yang sama.
Hasil ini kelihatan sangat pelik, tetapi ia sebenarnya tidak sukar untuk difahami. Memandangkan PHP ialah bahasa dinamik, kita boleh mengubah suai takrif pembolehubah, fungsi dan kelas pada bila-bila masa. Oleh itu, untuk memastikan ketepatan dan ketekalan program, PHP mesti menghuraikan dan menyusun setiap kelas semasa runtime.
Namun, mekanisme ini juga membawa beberapa masalah. Memandangkan kelas yang sama boleh dimuatkan beberapa kali, kodnya juga boleh dilaksanakan beberapa kali. Bukan sahaja sumber sistem pembaziran ini, ia juga boleh membawa kepada beberapa akibat yang tidak dijangka. Sebagai contoh, dalam beberapa kes, kita perlu mentakrifkan pembolehubah global atau melaksanakan operasi pemulaan tertentu dalam fail kelas, dan operasi ini juga akan dilakukan beberapa kali, mengakibatkan tingkah laku program yang tidak menentu.
Untuk menyelesaikan masalah ini, kami boleh menggunakan kaedah yang serupa dengan mekanisme pemuatan automatik untuk hanya memuatkan setiap kelas sekali. PHP menyediakan mekanisme autoloading kelas, yang boleh mendaftarkan fungsi pemuat (pemuat) ke dalam tindanan autoloading melalui fungsi spl_autoload_register Apabila kelas perlu dimuatkan, PHP akan memanggil fungsi pemuat ini secara berurutan sehingga yang tersedia ditemui kategori. Dengan cara ini, apabila kita perlu menggunakan kelas tertentu, PHP akan memuatkannya secara automatik untuk kita, dan hanya akan memuatkannya sekali Kaedah ini sangat mengurangkan pembaziran sumber semasa pemuatan dan penyusunan, dan meningkatkan prestasi dan kebolehselenggaraan program. .
Ringkasnya, dalam PHP, ia adalah konsep yang sangat penting bahawa kelas hanya boleh dimuatkan sekali sahaja. Dengan memahami konsep ini, kami dapat memahami dengan lebih baik proses pemuatan dan penyusunan kelas serta mengelakkan pertindihan kod dan pembaziran sumber yang tidak perlu.
Atas ialah kandungan terperinci Bolehkah setiap kelas dalam php dimuatkan sekali sahaja?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!