Jadual Kandungan
PHP 反射 ReflectionClass,phpreflectionclass
php 怎把反射初始化的对象转换成类的对象
PHP 反射API的问题,急
Rumah php教程 php手册 PHP 反射 ReflectionClass,phpreflectionclass

PHP 反射 ReflectionClass,phpreflectionclass

Jun 13, 2016 am 09:22 AM
permulaan

PHP 反射 ReflectionClass,phpreflectionclass

今天遇到了这样一个问题,如下代码:

classA.php

<?php

class ClassA{
	
	public function funcAa(){
	
	}
	
	public function funcAb(){
	
	}
	
	public function funcAc(){
	
	}
}

?>
Salin selepas log masuk

  

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);
?>
Salin selepas log masuk

当我需要找出ClassB里面的所有方法的时候结果如下:

Array
(
    [0] => funcBa
    [1] => funcBb
    [2] => funcBc
    [3] => funcAa
    [4] => funcAb
    [5] => funcAc
)
Salin selepas log masuk

一共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));
Salin selepas log masuk

结果如下:

Array
(
    [0] => funcBa
    [1] => funcBb
    [2] => funcBc
)
Salin selepas log masuk

少了一个方法 funcAa ,虽然funcAa是 ClassB 从 ClassA那里继承过来的,但是同样ClassB也有这个方法,所以不是我想要的结果。

解决方法:

$reflection = new ReflectionClass('ClassB');

print_r($reflection->getMethods());
Salin selepas log masuk

结果:

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
        )

)
Salin selepas log masuk

可以看到 [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);
Salin selepas log masuk

最后结果:

Array
(
    [0] => funcBa
    [1] => funcBb
    [2] => funcBc
    [3] => funcAa
)
Salin selepas log masuk

完成,关于 ReflectionClass 更多的知识请参考手册

php 怎把反射初始化的对象转换成类的对象

你要确定引入了User类的类定义文件,否则反序列化是不会成功的。
反序列化失败,$user就不会是User对象的实例,也就不会存在方法getModelName了。
 

PHP 反射API的问题,急

Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn

Alat AI Hot

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

AI Hentai Generator

AI Hentai Generator

Menjana ai hentai secara percuma.

Artikel Panas

R.E.P.O. Kristal tenaga dijelaskan dan apa yang mereka lakukan (kristal kuning)
2 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
Repo: Cara menghidupkan semula rakan sepasukan
4 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island Adventure: Cara mendapatkan biji gergasi
4 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌

Alat panas

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Windows tidak boleh memulakan pemacu peranti untuk pembetulan perkakasan ini (kod 37). Windows tidak boleh memulakan pemacu peranti untuk pembetulan perkakasan ini (kod 37). Apr 14, 2023 pm 01:22 PM

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,

FIX: Windows tidak boleh memulakan pemacu peranti untuk perkakasan ini FIX: Windows tidak boleh memulakan pemacu peranti untuk perkakasan ini Apr 13, 2023 pm 01:19 PM

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

Perkara yang perlu dilakukan jika rutin permulaan perpustakaan pautan dinamik gagal Perkara yang perlu dilakukan jika rutin permulaan perpustakaan pautan dinamik gagal Dec 29, 2023 am 10:30 AM

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

Bagaimana untuk memulakan komputer dalam win7 Bagaimana untuk memulakan komputer dalam win7 Jan 07, 2024 am 11:53 AM

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.

Betulkan Tidak dapat memulakan ralat sistem grafik pada PC Betulkan Tidak dapat memulakan ralat sistem grafik pada PC Mar 08, 2024 am 09:55 AM

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

Bagaimana untuk menetapkan semula tetapan rangkaian win7 Bagaimana untuk menetapkan semula tetapan rangkaian win7 Dec 26, 2023 pm 06:51 PM

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

Kamus permulaan program C++ Kamus permulaan program C++ Sep 09, 2023 pm 07:01 PM

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

Betulkan: SSD baharu tidak muncul dalam Windows 11, 10 Betulkan: SSD baharu tidak muncul dalam Windows 11, 10 Apr 14, 2023 pm 02:52 PM

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.

See all articles