PHPのマジックメソッドとマジック定数とは何ですか

青灯夜游
リリース: 2023-03-10 19:38:01
オリジナル
2583 人が閲覧しました

PHP では、マジック メソッドは、「__call()」、「__get()」、「__set()」など、2 つのアンダースコア「__」で始まるメソッドを指します。マジック定数は、メソッドを指します。これは、「__LINE__」、「__FILE__」など、コードの場所の変更に応じて変化する 8 つの定数になります。

PHPのマジックメソッドとマジック定数とは何ですか

#このチュートリアルの動作環境: Windows7 システム、PHP7.1 バージョン、DELL G3 コンピューター

Magic Method (マジック メソッド)

PHP では、2 つのアンダースコア

__で始まるメソッドをマジック メソッドと呼び、PHP において重要な役割を果たします。マジック メソッドには次のものが含まれます:

  • __construct()、クラス コンストラクター
  • __destruct()、クラス デストラクター
  • __call()、オブジェクト内のアクセスできないメソッドを呼び出す場合は、
  • __callStatic()、静的モードでアクセスできないメソッドを呼び出す場合は、
  • # を呼び出します。
  • #get()、クラスのメンバ変数を取得する場合は
  • __set()を呼び出し、クラス## のメンバ変数を設定する場合は # を呼び出す
  • __isset()
  • 、アクセスできないプロパティ__unset()# でisset()またはempty()
  • が呼び出されたときに呼び出されます。 ##、アクセスできないプロパティに対して
  • unset()が呼び出されたときに呼び出されます。__sleep()
  • serialize()を実行すると、この関数が最初に呼び出されます__wakeup()
  • unserialize()が実行されると、この関数が最初に呼び出されます。__toString()
  • 、クラスが文字列として扱われる場合の応答メソッド
  • # __invoke()
  • 、関数を呼び出してオブジェクトを呼び出すときの応答メソッド
  • __set_state()
  • 、エクスポート時に
  • var_export()を呼び出すときクラスの場合、この静的メソッドが呼び出されます。__clone()
  • 、オブジェクトのコピーが完了したら、
  • #__construct()
および

__destruct( )コンストラクターとデストラクターはよく知られているはずです。これらはオブジェクトの作成時と破棄時に呼び出されます。たとえば、ファイルを開き、オブジェクトが作成されたときにファイルを開き、オブジェクトが死んだときにファイルを閉じる必要があります。
handle = fopen(...); } function __destruct(){ fclose($this->handle); } } ?>
ログイン後にコピー
これら 2 つのメソッドは、継承時に展開できます。たとえば、次のようになります。

#__call ()

および

__callStatic()

これら 2 つのメソッドは、オブジェクト内でアクセスできないメソッドが呼び出されたときに呼び出され、後者はは静的メソッドです。これら 2 つのメソッドは、変数メソッド (変数関数) 呼び出しで使用できます。
ログイン後にコピー
__get()

__set()

__isset()、および__unset()#これら 2 つの関数は、クラスのメンバー変数を取得または設定するときに呼び出されます。たとえば、オブジェクト自体のメンバー変数の代わりに、オブジェクト変数を別の配列に保存します#
<?php class MethodTest { public function __call ($name, $arguments) { echo "Calling object method &#39;$name&#39; ". implode(&#39;, &#39;, $arguments). "\n"; } public static function __callStatic ($name, $arguments) { echo "Calling static method &#39;$name&#39; ". implode(&#39;, &#39;, $arguments). "\n"; } } $obj = new MethodTest; $obj->runTest(&#39;in object context&#39;); MethodTest::runTest(&#39;in static context&#39;); ?>
ログイン後にコピー
#__sleep()and#__wakeup()

serialize()unserialize()を実行すると、これら 2 つの関数が最初に呼び出されます。たとえば、オブジェクトをシリアル化する場合、そのオブジェクトにはデータベース リンクが存在しますが、逆シリアル化中にリンク状態を復元したい場合は、これら 2 つの関数を再構築することでリンクを復元できます。例は次のとおりです。
<?php class MethodTest { private $data = array(); public function __set($name, $value){ $this->data[$name] = $value; } public function __get($name){ if(array_key_exists($name, $this->data)) return $this->data[$name]; return NULL; } public function __isset($name){ return isset($this->data[$name]) } public function unset($name){ unset($this->data[$name]); } } ?>
ログイン後にコピー

__toString()

オブジェクトを文字列として扱う場合の応答メソッド。たとえば、オブジェクト

server = $server; $this->username = $username; $this->password = $password; $this->db = $db; $this->connect(); } private function connect() { $this->link = mysql_connect($this->server, $this->username, $this->password); mysql_select_db($this->db, $this->link); } public function __sleep() { return array('server', 'username', 'password', 'db'); } public function __wakeup() { $this->connect(); } } ?>
ログイン後にコピー

を出力するには、

echo $obj;を使用します。このメソッドは文字列のみを返すことができ、このメソッドで例外をスローすることはできません。スローしないと、致命的なエラーが発生します。

__invoke()

関数を呼び出してオブジェクトを呼び出すときの応答メソッド。次のように

ログイン後にコピー

__set_state()

Call

var_export()

この静的メソッドは、クラスをエクスポートするときに呼び出されます。 。

ログイン後にコピー
__clone()

オブジェクトのコピーが完了すると呼び出されます。たとえば、「デザインパターンとPHP実装の詳細解説: シングルトンモード」で説明したシングルトンモードの実装方法では、オブジェクトの複製を防ぐためにこの機能が使用されます。

var1 = $an_array['var1']; $obj->var2 = $an_array['var2']; return $obj; } } $a = new A; $a->var1 = 5; $a->var2 = 'foo'; var_dump(var_export($a)); ?>
ログイン後にコピー
マジック定数

PHP の定数のほとんどは変更されませんが、位置に応じて変更される 8 つの定数があります。これらの 8 つの定数は、コードの場所 これら 8 つの定数はマジック定数と呼ばれます。

__LINE__

、ファイル内の現在の行番号

__FILE__

、ファイル

の完全なパスとファイル名
  • __DIR__、ファイルが置かれているディレクトリ
  • __FUNCTION__、関数名
  • __CLASS__、クラス名
  • __TRAIT__、トレイト名
  • __METHOD__、クラスメソッド名
  • __NAMESPACE__、現在の名前空間の名前
  • これらのマジック定数は、現在の環境情報を取得したり、ログを記録したりするためによく使用されます。推奨学習: 「
  • PHP ビデオ チュートリアル

以上がPHPのマジックメソッドとマジック定数とは何ですかの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!