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了。

ホットAIツール

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

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

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

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

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

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

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

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

ホットトピック











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

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

解決策: 1. アプリケーションを再インストールします; 2. DLL を修復または再インストールします; 3. システムの復元またはチェックポイントの回復; 4. システム ファイル チェッカー (SFC) を使用してスキャンします; 5. スタートアップ項目とサービスを確認します; 6. ツールを使用します; 7.公式ドキュメントやフォーラムを確認する; 8. セキュリティ ソフトウェアを検討する; 9. イベント ビューアを確認する; 10. 専門家の助けを求めるなど。

win7 システムは非常に優れた高性能システムであり、win7 を継続的に使用していると、多くの友人が win7 でコンピュータを初期化する方法を尋ねてきます。今日は、エディターが win7 コンピューターの工場出荷時の設定を復元する方法を紹介します。 win7 でコンピュータを初期化する方法に関する関連情報: 画像とテキストによる詳細な手順 手順: 1. 「スタート メニュー」を開いて入ります。 2. 左側の下部をクリックして設定を入力します。 3. Win10 の更新と回復の設定インターフェイスで、選択します。 4. 以下の「すべてのコンテンツを削除して Windows を再インストールする」をクリックします。 5. 以下の「初期化」設定が表示されるので、クリックします。 6. 「コンピュータには複数のドライブがあります」設定オプションを入力します ここには 2 つのオプションがあり、状況に応じて選択できます。

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

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

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

SSD はテクノロジーの世界に革命をもたらしました。これらのデータ ストレージ ソリューションは、超高速で比類のない読み取り/書き込み速度を備えているため、すべてのユーザーがシステム オペレーティング システムをインストールしたいと考えています。しかし、新しい SSD が Windows デバイスに表示されない場合はどうすればよいでしょうか?これは、システムに接続された新品の SSD で発生する可能性のある一般的な問題です。心配しないで。適切な解決策を見つけました。以下の手順に従うだけで、SSD がすぐにファイル エクスプローラーに戻ります。解決策 - 1. SSD 接続を確認します。 USB ハブを使用している場合は、SSD をシステムに直接接続します。 SSD のコネクタに物理的な欠陥がないか確認してください。
