PHPマジック関数の実行時間とシーケンス解析
PHPマジック関数の実行時間とシーケンス解析
1: 魔法の関数
1. __construct()
はオブジェクトをインスタンス化するときに呼び出されます。
__construct とクラス名と関数名の関数が同時に存在する場合、__construct が呼び出され、もう一方は呼び出されません。
2. __destruct()
オブジェクトが削除されるか、オブジェクトの操作が終了するときに呼び出されます。
3. __call()
オブジェクトは特定のメソッドを呼び出します。
メソッドが存在する場合は直接呼び出されます。
存在しない場合は __call 関数が呼び出されます。
4. __get()
オブジェクトの属性を読み取る場合、
属性が存在する場合は属性値が直接返されます。
存在しない場合は __get 関数が呼び出されます。
5. __set()
オブジェクトの属性を設定するとき、
属性が存在する場合は値が直接割り当てられます。
存在しない場合は __set 関数が呼び出されます。
6. __toString()
オブジェクトを印刷または出力するときに呼び出されます。 echo $obj; または print $obj; など。 __clone()
オブジェクトのクローンを作成するときに呼び出されます。例: $t=new Test();$t1=clone $t; __sleep()
はシリアル化の前に呼び出されます。オブジェクトが比較的大きく、シリアル化する前にいくつかのものを削除したい場合は、この関数を検討できます。
9. __wakeup()
は、シリアル化解除時に呼び出され、オブジェクトの初期化作業を実行します。
10. __isset()
オブジェクトの属性が存在するかどうかを確認するときに呼び出されます。例: isset($c->name)。
11. __unset()
オブジェクトのプロパティの設定を解除するときに呼び出されます。例: unset($c->name)。
12. __set_state()
var_export が呼び出されたときに呼び出されます。 __set_state の戻り値を var_export の戻り値として使用します。
13. __autoload()
オブジェクトをインスタンス化する際、対応するクラスが存在しない場合、このメソッドが呼び出されます。
2: 魔法定数 1. __LINE__
ファイル内の現在の行番号を返します。
2. __FILE__
ファイルのフルパスとファイル名を返します。インクルード ファイルで使用された場合は、インクルード ファイル名を返します。 PHP 4.0.2 以降、__FILE__ には常に絶対パスが含まれますが、それより前のバージョンには相対パスが含まれる場合がありました。
3. __FUNCTION__
関数名を返します (PHP 4.3.0 の新機能)。 PHP 5 以降、この定数は定義されたとおりの関数名を返します (大文字と小文字は区別されます)。 PHP 4 では、この値は常に小文字です。
4. __CLASS__
クラスの名前を返します (PHP 4.3.0 の新機能)。 PHP 5 以降、この定数は定義されたときのクラスの名前を返します (大文字と小文字は区別されます)。 PHP 4 では、この値は常に小文字です。
5. __METHOD__
クラスのメソッド名を返します (PHP 5.0.0 で新しく追加されました)。定義されたとおりのメソッド名を返します (大文字と小文字が区別されます)。
3: マジック関数の例
1.__construct() オブジェクトをインスタンス化するとき、最初にオブジェクトのこのメソッドが呼び出されます。
class Test { function __construct() { echo "before"; } } $t = new Test(); ログイン後にコピー |
同じクラス名の php5 オブジェクト モデルと関数がクラスのコンストラクターであることがわかっているため、コンストラクターと __construct() メソッドを同時に定義すると、php5 __construct() 関数が呼び出される代わりに、デフォルトでコンストラクターが呼び出されます。そのため、__construct() はクラス
のデフォルトのコンストラクターとして機能します。
2.__destruct() このメソッドは、オブジェクトが削除されるか、オブジェクトの操作が終了するときに呼び出されます。
class Test { function __destruct() { echo "end"; } } $t = new Test(); 将会输出 end ログイン後にコピー |
3.__get() は、存在しないプロパティを読み取ろうとしたときに呼び出されます。
class Test { public function __get($key) { echo $key . " 不存在"; } } $t = new Test(); echo $t->name; 就会输出: name 不存在 ログイン後にコピー |
4.__set() は、存在しないプロパティに値を書き込もうとするときに呼び出されます。
class Test { public function __set($key,$value) { echo '对'.$key . "附值".$value; } } $t = new Test(); $t->name = "aninggo"; 就会输出: 对 name 附值 aninggo ログイン後にコピー |
?
5.__call() このメソッドは、オブジェクトに存在しないメソッドを呼び出そうとしたときに呼び出されます。
class Test { public function __call($Key, $Args) { echo "您要调用的 {$Key} 方法不存在。你传入的参数是:" . print_r($Args, true); } } $t = new Test(); $t->getName(aning,go); ログイン後にコピー |
呼び出したい getName メソッドは存在しません。パラメータは次のとおりです: Array
(
[0] => aning
[1] => go
)
オブジェクト
を印刷するときに 6.__toString() が呼び出されます。
class Test { public function __toString() { return "打印 Test"; } } $t = new Test(); echo $t; ログイン後にコピー |
print Test
が出力されます。
7.__clone() はオブジェクトのクローン作成時に呼び出されます
class Test { public function __clone() { echo "我被复制了!"; } } $t = new Test(); $t1 = clone $t; 程序输出:我被克隆了!
4.ところで、php5 で提供されている非常に COOl な実験関数をいくつか紹介します
(1) runkit_method_rename この関数は呼び出す関数の名前を動的に変更できます。
class Test { function foo() { return "foo! "; } } runkit_method_rename( 'Test', //类名 'foo',//实际调用的函数 'bar'//显示调用的函数 ); echo Test::bar(); 程序将输出 foo! ログイン後にコピー |
この関数はクラスに関数を動的に追加できます
(3)runkit_method_copy
可以把A类中的函数拷贝到类B中并对函数重命名
class Foo { function example() { return "foo! "; } } class Bar { //空类 } //执行拷贝 runkit_method_copy('Bar', 'baz', 'Foo', 'example'); //执行拷贝后的函数 echo Bar::baz(); ログイン後にコピー |
(4) runkit_method_redefine
动态的修改函数的返回值
这个函数可以让我们轻松的实现对类的MOCK测试!是不是很COOL呢
class Example { function foo() { return "foo! "; } } //创建一个测试对象 $e = new Example(); // 在测试对象之前输出 echo "Before: " . $e->foo(); // 修改返回值 runkit_method_redefine( 'Example', 'foo', '', 'return "bar! ";', RUNKIT_ACC_PUBLIC ); // 执行输出 echo "After: " . $e->foo(); ログイン後にコピー |
(5)runkit_method_remove
这个函数就很简单了,看名字就能看出来了,动态的从类中移除函数
class Test { function foo() { return "foo! "; } function bar() { return "bar! "; } } // 移除foo函数 runkit_method_remove( 'Test', 'foo' ); echo implode(' ', get_class_methods('Test')); 程序输出 bar

ホット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)

ホットトピック









ファーウェイは、Watch GT 5 および Watch GT 5 Pro スマートウォッチ用のソフトウェア バージョン 5.0.0.100(C00M01) をグローバルに展開しています。これら 2 つのスマートウォッチは最近ヨーロッパで発売され、標準モデルが同社の最も安価なモデルとして登場しました。このハーモニー

『鉄拳』シリーズのディレクターである原田勝弘氏は、かつて真剣にカーネル・サンダースを象徴的な格闘ゲームに登場させようとした。 TheGamerとのインタビューで原田氏は、このアイデアを日本KFCに売り込み、ファストフード界のレジェンドをGとして追加したいと考えていたことを明かした。

2024年9月初め、AnkerのZolo 140W充電器がリークされました。これは同社初のディスプレイ付き壁掛け充電器だったため、大きな話題になりました。 YouTube の Xiao Li TV からの新しい開封ビデオでは、この製品を直接見ることができます。

テスラは最新の完全自動運転 (監視付き) バージョン 12.5.5 を展開しており、これには、ファウンデーション シリーズのトリム価格に含まれる機能を備えたピックアップが発売されてから 10 か月後に、約束されていたサイバートラック FSD オプションがついに付属します。 F

Xiaomiは間もなくMijiaグラフェンオイルヒーターを中国で発売する予定です。同社は最近、Youpin プラットフォームでホストされるスマート ホーム製品のクラウドファンディング キャンペーンを実施し、成功を収めました。ページによると、デバイスはすでに出荷され始めています

Garmin は、最新のハイエンド スマートウォッチの新しい安定したアップデートのセットで月末を迎えます。要約すると、同社は Enduro 3、Fenix E、および Fenix 8 のバッテリー消耗の多さに対処するためにシステム ソフトウェア 11.64 をリリースしました (Amazon で現在 1,099.99 ドル)。

サムスンの待望の折りたたみ式「スペシャルエディション」の発売には、また新たな展開が加わった。ここ数週間、いわゆる Galaxy Z Fold Special Edition に関する噂はかなり静かになりました。代わりに、焦点はGalaxy S25シリーズに移りました。

10 年以上の歴史を持つ Manjaro は、インストールと使用が簡単で、初心者とパワーユーザーの両方に適した最もユーザーフレンドリーな Linux ディストリビューションの 1 つとみなされています。主にオーストリア、ドイツ、フランスで開発されたこの Arch ベースのディストリビューション
