PHP 反射 ReflectionClass,phpreflectionclass
PHP 反射 ReflectionClass,phpreflectionclass
今天遇到了这样一个问题,如下代码:
classA.php
<?php class ClassA{ public function funcAa(){ } public function funcAb(){ } public function funcAc(){ } } ?>
classB.php
<?php include './classA.php'; class ClassB extends ClassA{ public function funcBa(){ } public function funcBb(){ } public function funcBc(){ } public function funcAa(){ parent::funcAa(); } } $classB = new ClassB; $classFuncB = get_class_methods($classB); echo '<pre class="brush:php;toolbar:false">'; print_r($classFuncB); ?>
当我需要找出ClassB里面的所有方法的时候结果如下:
Array ( [0] => funcBa [1] => funcBb [2] => funcBc [3] => funcAa [4] => funcAb [5] => funcAc )
一共6个方法,实际上我不想要继承了ClassA里面的方法,我只想要ClassB的方法,怎么办呢?我稍微更改了如下:
$classA = new ClassA; $classB = new ClassB; $classFuncA = get_class_methods($classA); $classFuncB = get_class_methods($classB); echo '<pre class="brush:php;toolbar:false">'; print_r(array_diff($classFuncB,$classFuncA));
结果如下:
Array ( [0] => funcBa [1] => funcBb [2] => funcBc )
少了一个方法 funcAa ,虽然funcAa是 ClassB 从 ClassA那里继承过来的,但是同样ClassB也有这个方法,所以不是我想要的结果。
解决方法:
$reflection = new ReflectionClass('ClassB'); print_r($reflection->getMethods());
结果:
Array ( [0] => ReflectionMethod Object ( [name] => funcBa [class] => ClassB ) [1] => ReflectionMethod Object ( [name] => funcBb [class] => ClassB ) [2] => ReflectionMethod Object ( [name] => funcBc [class] => ClassB ) [3] => ReflectionMethod Object ( [name] => funcAa [class] => ClassB ) [4] => ReflectionMethod Object ( [name] => funcAb [class] => ClassA ) [5] => ReflectionMethod Object ( [name] => funcAc [class] => ClassA ) )
可以看到 [4]、[5] 里面的class 对应的值是ClassA,而其他对应的值都是ClassB。通过这个可以用foreach来实现最后想要的结果:
$reflection = new ReflectionClass('ClassB'); $array = ''; foreach($reflection->getMethods() as $obj){ if($obj->class == $reflection->getName()){ //$reflection->getName() 获取类名 $array[] = $obj->name; } } echo '<pre class="brush:php;toolbar:false">'; print_r($array);
最后结果:
Array ( [0] => funcBa [1] => funcBb [2] => funcBc [3] => funcAa )
完成,关于 ReflectionClass 更多的知识请参考手册
你要确定引入了User类的类定义文件,否则反序列化是不会成功的。
反序列化失败,$user就不会是User对象的实例,也就不会存在方法getModelName了。

Alat AI Hot

Undresser.AI Undress
Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover
Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool
Gambar buka pakaian secara percuma

Clothoff.io
Penyingkiran pakaian AI

AI Hentai Generator
Menjana ai hentai secara percuma.

Artikel Panas

Alat panas

Notepad++7.3.1
Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina
Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1
Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6
Alat pembangunan web visual

SublimeText3 versi Mac
Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Topik panas

Apabila Windows mengesan bahawa pemacu peranti tidak serasi atau rosak, ia tidak boleh memulakannya. Peranti berhenti berfungsi dan apabila pengguna menyiasat, mesej ralat "Windows tidak boleh memulakan pemacu peranti untuk perkakasan ini (Kod 37)" muncul dalam anak tetingkap Status Peranti. Menyelesaikan masalah ini adalah mudah dan anda boleh melakukannya dengan mudah. Betulkan 1 – Imbas komputer anda Anda boleh mengimbas peranti anda untuk sebarang perubahan perkakasan. Windows akhirnya akan menyemak dan mengesan sebarang perubahan pemacu. 1. Anda hanya perlu klik kanan pada "Windows Key" dan klik pada "Device Manager". 2. Apabila Pengurus Peranti muncul pada sistem anda, klik Tindakan pada bar menu. 3. Di sini,

Kod ralat 37 bermakna Windows telah mengesan masalah dengan pemacu peranti dan tidak boleh memulakan peranti perkakasan. Ini bermakna pemacu peranti perisian tidak dipasang dengan betul pada sistem anda atau perkakasan yang anda cuba gunakan tidak serasi dengan Windows. Anda sudah tahu bahawa pemacu adalah penting untuk kelancaran peranti anda, jadi jika anda akan menggunakan peranti perkakasan, anda perlu menyelesaikan ralat ini dengan segera. Dalam artikel ini, kami akan menunjukkan kepada anda pelbagai cara untuk memintas ralat ini. Apakah yang menyebabkan kod ralat Windows 37? Apabila anda mendapat Windows tidak boleh memulakan pemacu peranti untuk perkakasan ini. (Kod 37), ia boleh disebabkan oleh beberapa isu, termasuk: Isu keserasian – apabila anda menambah hard

Penyelesaian: 1. Pasang semula aplikasi; 2. Membaiki atau memasang semula DLL; Semak dokumentasi atau forum rasmi;

Sistem win7 adalah sistem berprestasi tinggi yang sangat baik Semasa penggunaan win7 secara berterusan, ramai rakan bertanya bagaimana untuk memulakan komputer dalam win7! Hari ini, editor akan membawa anda cara memulihkan tetapan kilang komputer win7. Maklumat berkaitan tentang cara untuk memulakan komputer dalam win7: Arahan terperinci dengan gambar dan teks Langkah: 1. Buka "Menu Mula" dan masukkan. 2. Klik untuk memasukkan tetapan di bahagian bawah sebelah kiri. 3. Dalam antara muka tetapan kemas kini dan pemulihan Win10, pilih. 4. Klik di bawah "Alih keluar semua kandungan dan pasang semula Windows". 5. Anda boleh melihat tetapan "Permulaan" berikut, dan kemudian klik. 6. Masukkan pilihan tetapan "Komputer anda mempunyai beberapa pemacu" Terdapat dua pilihan di sini, anda boleh memilih mengikut situasi.

Ramai pemain telah menghadapi isu yang mengecewakan permainan gagal untuk memulakan sistem grafik. Artikel ini akan menyelidiki sebab biasa di sebalik masalah ini dan mencari penyelesaian yang mudah tetapi berkesan yang akan membawa anda kembali ke papan dan mengatasi tahap dalam masa yang singkat. Jadi, jika anda mendapat Tidak dapat memulakan mesej ralat sistem grafik dalam Rollercoaster Tycoon, Assassin's Creed, Tony Hawk's Pro Skater, dll., kemudian ikuti penyelesaian yang dinyatakan dalam artikel ini. Ralat Permulaan Tidak dapat memulakan sistem grafik. Kad grafik tidak disokong. Betulkan Tidak dapat memulakan mesej ralat sistem grafik Untuk menyelesaikan Tidak dapat memulakan ralat sistem grafik dalam permainan seperti Rollercoaster Tycoon, Assassin's Creed, Tony Hawk's Pro Skater, dll., anda boleh mencuba penyelesaian berikut: Kemas kini pemacu kad grafik anda dalam mod keserasian

Sistem win7 adalah sistem berprestasi tinggi yang sangat baik Baru-baru ini, ramai rakan sistem win7 sedang mencari cara untuk memulakan tetapan rangkaian dalam win7 Hari ini, editor akan membawakan kepada anda butiran permulaan rangkaian komputer win7 tengok tutorial. Tutorial terperinci tentang cara untuk memulakan tetapan rangkaian dalam win7: Langkah grafik: 1. Klik menu "Mula", cari dan buka "Panel Kawalan", dan kemudian klik "Pusat Rangkaian dan Perkongsian". 2. Kemudian cari dan klik "Tukar Peranti Penyesuai". 3. Seterusnya, dalam tetingkap yang terbuka, klik kanan "Sambungan Kawasan Setempat" dan kemudian klik "Properties". 4. Selepas membukanya, cari "Internet Protocol Version (TCP/IPv4)" dan dua kali ganda

C++ berbeza daripada Python dari segi kamus dengan nama yang sama, tetapi ia mempunyai struktur data yang sama dengan fungsi yang serupa. C++ menyokong pemetaan, yang boleh digunakan dalam kelas STL std::map. Objek peta mengandungi sepasang nilai dalam setiap entri, satu adalah nilai utama dan satu lagi adalah nilai peta. Nilai utama digunakan untuk mencari dan mengenal pasti secara unik entri dalam peta. Walaupun nilai yang dipetakan tidak semestinya unik, nilai utama mestilah sentiasa unik dalam peta. Mari kita lihat cara menggunakan pemetaan. Mula-mula, mari lihat cara untuk menentukan struktur data yang dipetakan dalam C++. Sintaks #includemap<data_type1,data_type2>myMap Mari kita ambil contoh untuk melihat cara melakukan ini − Contoh #incl

SSD telah merevolusikan dunia teknologi. Penyelesaian penyimpanan data ini, dengan kelajuan baca/tulis yang sangat pantas dan tiada tandingannya, membuatkan setiap pengguna tidak sabar-sabar untuk memasang sistem pengendalian sistem mereka di dalamnya. Tetapi bagaimana jika SSD baharu anda tidak muncul pada peranti Windows anda? Ini adalah isu biasa yang mungkin anda hadapi dengan SSD baharu yang dipalamkan ke dalam sistem anda. jangan risau. Kami baru sahaja mendapat penyelesaian yang betul, anda hanya perlu mengikuti langkah ini dan SSD anda akan kembali dalam Penjelajah Fail anda dalam masa yang singkat. Penyelesaian - 1. Periksa sambungan SSD. Jika anda menggunakan hab USB, sambungkan SSD terus ke sistem anda. Periksa penyambung SSD untuk sebarang kecacatan fizikal.
