目次
PHP 反射 ReflectionClass,phpreflectionclass
php 怎把反射初始化的对象转换成类的对象
PHP 反射API的问题,急
ホームページ php教程 php手册 PHP 反射 ReflectionClass,phpreflectionclass

PHP 反射 ReflectionClass,phpreflectionclass

Jun 13, 2016 am 09:22 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的问题,急

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

Windows がこのハードウェアのデバイス ドライバーを初期化できない (コード 37) 修正 Windows がこのハードウェアのデバイス ドライバーを初期化できない (コード 37) 修正 Apr 14, 2023 pm 01:22 PM

Windows は、デバイスのドライバーに互換性がないこと、または破損していることを検出すると、それを初期化できません。デバイスが動作を停止し、ユーザーが調査すると、「Windows はこのハードウェアのデバイス ドライバーを初期化できません (コード 37)」というエラー メッセージが [デバイス ステータス] ペインに表示されます。この問題を解決するのは簡単で、簡単に実行できます。解決策 1 – コンピューターをスキャンする ハードウェアの変更がないかデバイスをスキャンできます。 Windows は最終的にドライバーの変更を確認し、検出します。 1. 「Windows キー」を右クリックし、「デバイス マネージャー」をクリックするだけです。 2. システムにデバイス マネージャーが表示されたら、メニュー バーの [アクション] をクリックします。 3. ここで、

修正: Windows はこのハードウェアのデバイス ドライバーを初期化できません 修正: Windows はこのハードウェアのデバイス ドライバーを初期化できません Apr 13, 2023 pm 01:19 PM

エラー コード 37 は、Windows がデバイス ドライバーの問題を検出し、ハードウェア デバイスを起動できないことを意味します。これは、ソフトウェア デバイス ドライバーがシステムに正しくインストールされていないか、使用しようとしているハードウェアが Windows と互換性がないことを意味します。ドライバーがデバイスのスムーズな機能に重要であることはすでにご存知のとおり、ハードウェア デバイスを使用する場合は、このエラーをすぐに解決する必要があります。この記事では、このエラーを回避するさまざまな方法を紹介します。 Windows エラー コード 37 の原因は何ですか? Windows がこのハードウェアのデバイス ドライバーを初期化できない場合。 (コード 37) メッセージが表示される場合、次のようないくつかの問題が原因で発生する可能性があります。 互換性の問題 – ハードウェアを追加した場合

ダイナミック リンク ライブラリの初期化ルーチンが失敗した場合の対処方法 ダイナミック リンク ライブラリの初期化ルーチンが失敗した場合の対処方法 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. 「コンピュータには複数のドライブがあります」設定オプションを入力します ここには 2 つのオプションがあり、状況に応じて選択できます。

PCでグラフィックスシステムを初期化できないエラーを修正 PCでグラフィックスシステムを初期化できないエラーを修正 Mar 08, 2024 am 09:55 AM

多くのゲーマーは、ゲームがグラフィックス システムの初期化に失敗するというイライラする問題に遭遇したことがあります。この記事では、この問題の背後にある一般的な理由を詳しく掘り下げ、すぐにボードに戻ってレベルをクリアできるシンプルかつ効果的な解決策を見つけます。したがって、Rollercoaster Tycoon、Assassin’s Creed、Tony Hawk’s Pro Skater などで「グラフィック システムを初期化できません」というエラー メッセージが表示される場合は、この記事で説明されている解決策に従ってください。初期化エラー グラフィックス システムを初期化できません。グラフィックカードはサポートされていません。グラフィックス システムを初期化できないエラー メッセージを修正する Rollercoaster Tycoon、Assassin's Creed、Tony Hawk's Pro Skater などのゲームでのグラフィックス システムを初期化できないエラー メッセージを解決するには、次の回避策を試すことができます。互換モード

win7のネットワーク設定をリセットする方法 win7のネットワーク設定をリセットする方法 Dec 26, 2023 pm 06:51 PM

win7 システムは非常に優れた高性能システムです。最近、多くの win7 システムの友人が win7 のネットワーク設定を初期化する方法を探しています。今日は、エディターが win7 コンピュータのネットワーク初期化の詳細を紹介します。見てみましょう。チュートリアルを見てください。 win7 でネットワーク設定を初期化する方法に関する詳細なチュートリアル: グラフィカルな手順: 1. [スタート] メニューをクリックし、[コントロール パネル] を見つけて開き、[ネットワークと共有センター] をクリックします。 2. 次に、「アダプターデバイスの変更」を見つけてクリックします。 3. 次に、開いたウィンドウで「ローカル エリア接続」を右クリックし、「プロパティ」をクリックします。 4. 開いたら、「インターネット プロトコル バージョン (TCP/IPv4)」を見つけてダブルクリックします。

C++プログラム初期化辞書 C++プログラム初期化辞書 Sep 09, 2023 pm 07:01 PM

C++ は、同じ名前の辞書という点で Python とは異なりますが、同様の機能を備えた同じデータ構造を持っています。 C++ はマッピングをサポートしており、STL クラス std::map で使用できます。マップ オブジェクトには各エントリに値のペアが含まれており、1 つはキー値、もう 1 つはマップ値です。キー値は、マップ内のエントリを検索し、一意に識別するために使用されます。マップされた値は必ずしも一意である必要はありませんが、キーの値はマップ内で常に一意である必要があります。マッピングの使い方を見てみましょう。まず、C++ でマップされたデータ構造を定義する方法を見てみましょう。構文 #includemap<data_type1,data_type2>myMap; これを行う方法を確認するための例を見てみましょう-例 #incl

修正: 新しい 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 のコネクタに物理的な欠陥がないか確認してください。

See all articles