目錄
PHP 反射 ReflectionClass,phpreflectionclass
php 怎把反射初始化的对象转换成类的对象
PHP 反射API的问题,急
首頁 後端開發 php教程 PHP 反射 ReflectionClass,phpreflectionclass_PHP教程

PHP 反射 ReflectionClass,phpreflectionclass_PHP教程

Jul 13, 2016 am 10:15 AM
初始化

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 更多的知识请参考手册

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

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

PHP 反射API的问题,急

www.bkjia.comtruehttp://www.bkjia.com/PHPjc/900990.htmlTechArticlePHP 反射 ReflectionClass,phpreflectionclass 今天遇到了这样一个问题,如下代码: classA.php ?phpclass ClassA{public function funcAa(){}public function funcAb(){}...
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

<🎜>:泡泡膠模擬器無窮大 - 如何獲取和使用皇家鑰匙
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
北端:融合系統,解釋
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
Mandragora:巫婆樹的耳語 - 如何解鎖抓鉤
3 週前 By 尊渡假赌尊渡假赌尊渡假赌

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

熱門話題

Java教學
1666
14
CakePHP 教程
1425
52
Laravel 教程
1325
25
PHP教程
1272
29
C# 教程
1252
24
修正: Windows 無法初始化此硬體的裝置驅動程式 修正: Windows 無法初始化此硬體的裝置驅動程式 Apr 13, 2023 pm 01:19 PM

錯誤代碼 37 表示 Windows 偵測到裝置驅動程式有問題,無法啟動硬體裝置。這意味著您的系統上未正確安裝軟體裝置驅動程序,或者您嘗試使用的硬體與 Windows 不相容。您已經知道驅動程式對於設備的平穩運行至關重要,因此如果您要使用硬體設備,則需要立即解決此錯誤。在本文中,我們將向您展示繞過此錯誤的各種方法。是什麼原因導致 Windows 錯誤代碼 37?當您得到 Windows 無法初始化此硬體的裝置驅動程式。 (代碼 37) 訊息,它可能由幾個問題引起,包括:相容性問題 – 當您將硬

Windows 無法初始化此硬體的裝置驅動程式(代碼 37)修復 Windows 無法初始化此硬體的裝置驅動程式(代碼 37)修復 Apr 14, 2023 pm 01:22 PM

當 Windows 偵測到裝置的驅動程式不相容或損壞時,它無法對其進行初始化。裝置停止運作,當使用者調查時,「 Windows 無法為此硬體初始化裝置驅動程式(代碼 37) 」錯誤訊息顯示在「裝置狀態」窗格中。解決這個問題很容易,你可以很容易地做到這一點。修復 1 – 掃描電腦您可以掃描裝置以查找任何硬體變更。 Windows 最終將檢查並偵測任何驅動程式變更。 1.您只需右鍵單擊“ Windows鍵”並點擊“裝置管理員”。 2. 當裝置管理員出現在您的系統上時,請按一下功能表列上的「操作」。 3. 在這裡,

動態連結函式庫初始化例程失敗什麼辦 動態連結函式庫初始化例程失敗什麼辦 Dec 29, 2023 am 10:30 AM

解決方法:1、重新安裝應用程式;2、修復或重新安裝DLL;3、系統還原或檢查點恢復;4、使用系統檔案檢查器(SFC)掃描;5、檢查啟動項目和服務;6、使用工具;7、查閱官方文件或論壇;8、考慮安全軟體;9、檢視事件檢視器;10、尋求專家協助等等。

win7怎麼初始化電腦 win7怎麼初始化電腦 Jan 07, 2024 am 11:53 AM

win7系統是一款非常優秀的高效能係統,在對win7的不斷使用中有很多的朋友都在問win7怎麼初始化電腦!今天小編為大家帶來的就是win7電腦恢復出廠設定的操作方法。 win7怎麼初始化電腦的相關資訊:圖文詳解操作步驟:1、開啟“開始功能表”,然後進入。 2、點選進入左側底部的設定。 3、在Win10更新和恢復設定的介面中,選擇。 4、點選「刪除所有內容並重新安裝Windows」下方的。 5.可以看到如下「初始化」設定了,然後點選。 6、進入「你的電腦有多個驅動器」設定選項,這裡有和兩個選項,可以根據情況選擇

修復無法初始化PC上的圖形系統錯誤 修復無法初始化PC上的圖形系統錯誤 Mar 08, 2024 am 09:55 AM

許多遊戲玩家遇到了遊戲無法初始化圖形系統的令人沮喪的問題。這篇文章將深入探討這個問題背後的常見原因,並找到簡單而有效的解決方案,讓你重新回到棋盤上,並在任何時間內通過關卡。因此,如果你在過山車大亨、刺客信條、托尼霍克的職業溜冰者等中收到無法初始化圖形系統錯誤訊息,請遵循本文中提到的解決方案。初始化錯誤無法初始化圖形系統。不支援顯示卡。修復無法初始化圖形系統錯誤訊息要解決過山車大亨、刺客信條、托尼霍克的專業溜冰者等遊戲中的無法初始化圖形系統錯誤,可以嘗試執行以下解決方法:更新顯示卡驅動程式在兼容模

如何重置win7網路設置 如何重置win7網路設置 Dec 26, 2023 pm 06:51 PM

win7系統是一款非常優秀的高效能係統,最近一段時間裡有很多win7系統的小夥伴們都在找win7怎麼初始化網路設定的方法,今天小編為大家帶來的就是win7電腦網路初始化的詳細教程一起來看看吧。 win7怎麼初始化網路設定的詳細教學:圖文操作步驟:1、點“開始”選單,找到並開啟“控制台”,進去之後再點“網路和共用中心”。 2、然後找到並點選「更改適配器設備」。 3.接下來,在打開的視窗中,滑鼠右鍵點擊“本地連接”,再點“屬性”。 4.開啟之後,就找到“Internet協定版本(TCP/IPv4)”,再雙

修復:新 SSD 未在 Windows 11、10 中顯示 修復:新 SSD 未在 Windows 11、10 中顯示 Apr 14, 2023 pm 02:52 PM

SSD 徹底改變了科技世界。這些資料儲存解決方案憑藉其超快和無與倫比的讀取/寫入速度,讓每個使用者都渴望在其中安裝系統作業系統。但是,如果您的新 SSD 沒有出現在您的 Windows 裝置上怎麼辦?這是插入系統的全新 SSD 可能面臨的典型問題。不用擔心。我們剛剛得到了正確的解決方案,您所要做的就是按照這些步驟操作,SSD 將立即回到您的檔案總管。解決方法-1. 檢查SSD的連線。如果您使用的是 USB 集線器,請將 SSD 直接連接到您的系統。檢查 SSD 的連接器是否有任何實體缺陷。

C++程式初始化字典 C++程式初始化字典 Sep 09, 2023 pm 07:01 PM

C++在同名的字典方面與Python不同,但它具有相似功能的相同資料結構。 C++支援映射,可在STL類別std::map中使用。映射物件在每個條目中包含一對值,一個是鍵值,另一個是映射值。鍵值用於在映射中搜尋和唯一標識條目。而映射值不一定是唯一的,鍵值在映射中必須永遠是唯一的。讓我們看一下如何使用映射。首先,讓我們看看如何在C++中定義一個映射資料結構。語法#includemap<data_type1,data_type2>myMap;讓我們舉個例子,看看如何做到這一點−範例#incl

See all articles