ホームページ バックエンド開発 PHPチュートリアル PHP学習(2):PHPの魔法のメソッド

PHP学習(2):PHPの魔法のメソッド

Jun 23, 2016 pm 02:29 PM

PHP は、__ (2 つのアンダースコア) で始まるすべてのクラスメソッドをマジックメソッドとして扱います。したがって、独自のクラス メソッドを定義する場合は、先頭に __ を付けないでください。

1. __construct()

オブジェクトをインスタンス化するとき、このオブジェクトのコンストラクター メソッドが最初に呼び出されます

php5 オブジェクト モデルとクラスと同じ名前の関数が、コンストラクターと __construc() メソッドを同時に定義すると、php5 は同じ名前の関数を呼び出す代わりに、デフォルトで __contruct() を呼び出すため、 __contruct() がクラスのデフォルトのコンストラクターとして機能します。 ;

rrree

2, __destruct ()

デストラクターは、オブジェクトへのすべての参照が削除されるか、オブジェクトが明示的に破棄されるときに実行されます。

header('content-type:text/html;charset=utf-8');      class person{    private $name;    /**     * 构造函数-当你调用 new person创建对象的时候就调用.     * @param string     */    function __construct($name='啦'){        echo '调用构造'.$name;    }}$obj = new person();//就会输出 "调用构造啦"五个字
ログイン後にコピー

header('content-type:text/html;charset=utf-8');      class person{    private $_name;    function __construct($val){        $this->_name = $val;    }        function __destruct(){        echo $this->_name.'调用析构函数<br/>';    }    }$obj1 = new person('1');$obj2 = new person('2');$obj3 = new person('3');//因为以堆载的形式存入内存,析构时以的原则是后进先出,所以obj3先被析构,输出以下//3调用析构函数//2调用析构函数//1调用析构函数
ログイン後にコピー

3. オブジェクトに存在しないプロパティを読み取ろうとする場合は、__get(string $name)

が呼び出されます。場合によっては、php がエラー情報を提供することがあります。クラスに __get メソッドを追加すると、この関数を使用して Java のリフレクションと同様のさまざまな操作を実装できます。

header('content-type:text/html;charset=utf-8');      class person{    private $_name;    function __construct($val){        $this->_name = $val;    }        function __destruct(){        echo $this->_name.'调用析构函数<br/>';    }    }$obj1 = new person('1');$obj2 = new person('2');unset($obj2);$obj3 = new person('3');//值得注意的是,您如果再中间用unset移除了obj2或者用obj2=null显示移除  输出以下//会先执行析构obj2然后再执行obj3//2调用析构函数//3调用析构函数//1调用析构函数
ログイン後にコピー




4.__set(string $name,mixed $value)

未定義の変数に値を代入するときに呼び出されます

header('content-type:text/html;charset=utf-8');      class person{    private $name;    function __get($val){        return '没有这个名称的属性'.$val;    }}$obj = new person();echo $obj->name;//调用没有的属性输出该属性的值时,就能调用__get()魔术函数  $val就是你调用属性名称 //值得注意的是,没存在和定义私有修饰符,都属于未定义, 子类继承父类获取不到也一样//输出:没有这个名称的属性name
ログイン後にコピー

5、__call( string $name, array $arguments)

アクセスできないメソッド (未定義または非表示など) を呼び出すと、__call() が呼び出されます。

__callStatic(string $name, array $arguments)

アクセスできないメソッド (未定義または非表示など) が静的メソッド内で呼び出される場合、__callStatic() が呼び出されます。

6. __toString()

は、オブジェクトを印刷するときに呼び出されます。この関数は、オブジェクトを直接印刷するときに呼び出されます。

7. __​​clone()

オブジェクトが複製されるときに呼び出されます。

8. __sleep()

Serialize() 関数は、マジック メソッド __sleep があるかどうかを確認し、存在する場合は、__sleep() メソッドが最初に呼び出され、その後シリアル化操作が実行されます。この関数を使用すると、オブジェクトをクリーンアップし、オブジェクト内のすべての変数の名前を含む配列を返すことができます。メソッドが何も返さない場合、NULL がシリアル化され、E_NOTICE エラーが発生します。 __sleep メソッドは、コミットされていないデータや同様の操作を送信するためによく使用されます。同時に、この機能は、保存する必要のない大きなオブジェクトがある場合に非常に便利です。

9. __wakeup()

__sleep() とは逆に、unserialize() は __wakeup メソッドがあるかどうかを確認します。存在する場合、__wakeup メソッドが最初に呼び出され、オブジェクト データを事前に準備します。 __wakeup は、データベース接続の再確立やその他の初期化操作の実行など、逆シリアル化操作でよく使用されます。

10. __isset()

未定義の変数に対して isset() または empty() が呼び出される場合、 __isset() が呼び出されます。

11. __unset()

オブジェクトのプロパティの設定を解除するときに呼び出されます。例: unset($c->name)。

12. __set_state()

var_export が呼び出されるときに呼び出されます。 __set_state の戻り値を var_export の戻り値として使用します。

13. __autoload()

オブジェクトをインスタンス化する際、対応するクラスが存在しない場合、このメソッドが呼び出されます。簡単に言えば、これはクラスの自動ロードです。PHP が編成していないクラスを使用しようとすると、グローバル関数 __autoload が存在する場合、PHP はその名前のパラメーターを使用してそれを呼び出します。クラス。 。

14. __invoke()

関数を呼び出してオブジェクトを呼び出そうとすると、__invoke メソッドが自動的に呼び出されます。

マジック定数:

__LINE__ ファイル内の現在の行番号。

__FILE__ ファイルのフルパスとファイル名。インクルードされたファイル内で使用された場合、インクルードされたファイルの名前を返します。 PHP 4.0.2 以降、__FILE__ には常に絶対パス (またはシンボリック リンクの場合は解決された絶対パス) が含まれますが、以前のバージョンには相対パスが含まれる場合がありました。

__DIR__ ファイルが配置されているディレクトリ。インクルードされたファイル内で使用された場合、インクルードされたファイルが配置されているディレクトリを返します。これは dirname(__FILE__) と同等です。ルート ディレクトリでない限り、ディレクトリ名には末尾のスラッシュは含まれません。 (PHP 5.3.0 の新機能) =

__FUNCTION__ 関数名 (PHP 4.3.0 の新機能)。 PHP 5 以降、この定数は関数が定義されたときの関数の名前を返します (大文字と小文字は区別されます)。 PHP 4 では、この値は常に小文字です。

__CLASS__ クラスの名前 (PHP 4.3.0 の新機能)。 PHP 5 以降、この定数は定義されたときのクラスの名前を返します (大文字と小文字は区別されます)。 PHP 4 では、この値は常に小文字です。

__METHOD__ クラスのメソッド名 (PHP 5.0.0 で新しく追加されました)。定義されたとおりのメソッド名を返します (大文字と小文字が区別されます)。

__NAMESPACE__ 現在のネームスペースの名前 (大文字と小文字が区別されます)。この定数はコンパイル時に定義されます (PHP 5.3.0 の新機能)

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

ホットな記事タグ

メモ帳++7.3.1

メモ帳++7.3.1

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

SublimeText3 中国語版

SublimeText3 中国語版

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

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

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

11ベストPHP URLショートナースクリプト(無料およびプレミアム) 11ベストPHP URLショートナースクリプト(無料およびプレミアム) Mar 03, 2025 am 10:49 AM

11ベストPHP URLショートナースクリプト(無料およびプレミアム)

Laravelでフラッシュセッションデータを使用します Laravelでフラッシュセッションデータを使用します Mar 12, 2025 pm 05:08 PM

Laravelでフラッシュセッションデータを使用します

LaravelのバックエンドでReactアプリを構築する:パート2、React LaravelのバックエンドでReactアプリを構築する:パート2、React Mar 04, 2025 am 09:33 AM

LaravelのバックエンドでReactアプリを構築する:パート2、React

Laravelテストでの簡略化されたHTTP応答のモッキング Laravelテストでの簡略化されたHTTP応答のモッキング Mar 12, 2025 pm 05:09 PM

Laravelテストでの簡略化されたHTTP応答のモッキング

PHPのカール:REST APIでPHPカール拡張機能を使用する方法 PHPのカール:REST APIでPHPカール拡張機能を使用する方法 Mar 14, 2025 am 11:42 AM

PHPのカール:REST APIでPHPカール拡張機能を使用する方法

Codecanyonで12の最高のPHPチャットスクリプト Codecanyonで12の最高のPHPチャットスクリプト Mar 13, 2025 pm 12:08 PM

Codecanyonで12の最高のPHPチャットスクリプト

Laravelの通知 Laravelの通知 Mar 04, 2025 am 09:22 AM

Laravelの通知

2025 PHP状況調査の発表 2025 PHP状況調査の発表 Mar 03, 2025 pm 04:20 PM

2025 PHP状況調査の発表

See all articles