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调用析构函数
未定義の変数に値を代入するときに呼び出されます
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 の新機能)