PHP マジック メソッドの使用例_PHP チュートリアル
PHP マジック メソッドの使用例
この記事では主に、__get、__set、__call、__callStatic、__toString、__invoke などのマジック メソッドの使用例を説明します。参考
① __get/__set: オブジェクトのプロパティを引き継ぎます
存在しないオブジェクトのプロパティにアクセスする場合:
index.php
コードは以下の通りです:
define('BASEDIR',__DIR__); //ルートディレクトリ定数を定義します
BASEDIRをインクルードします。'/Common/Loader.php';
spl_autoload_register('\Common\Loader::autoload');
$obj = new CommonObject();
//phpで存在しないオブジェクトのプロパティにアクセスする場合
echo $obj->title;
エラーがスローされます: Notice: Unknown property: CommonObject::$title in D:practisephpdesignpsr0index.php on line 9
Common/Object.phpに__setメソッドと__getメソッドを追加した後
Object.php
コードは以下の通りです:
名前空間 Common;
クラスオブジェクト{
関数__set($key,$value){
}
関数__get($key){
}
}
index.phpを再度実行すると、エラーは報告されなくなります。
Common/Object.phpを再度修正します
コードは以下の通りです:
名前空間 Common;
クラスオブジェクト{
protected $array = array();
関数__set($key,$value){
var_dump(__METHOD__);
$this->array[$key] = $value;
}
関数__get($key){
var_dump(__METHOD__);
return $this->array[$key];
}
}
index.php
コードは次のとおりです:
define('BASEDIR',__DIR__); //ルートディレクトリ定数を定義します
BASEDIRをインクルードします。'/Common/Loader.php';
spl_autoload_register('\Common\Loader::autoload');
$obj = new CommonObject();
$obj->title = 'こんにちは';
echo $obj->title;
Index.php を実行、ページ出力:
コードは次のとおりです:
文字列 'CommonObject::__set' (長さ=20)
文字列 'CommonObject::__get' (長さ=20)
こんにちは
② __call/__callStatic: PHP オブジェクトのメソッドの呼び出しを制御します (__callStatic はクラスの静的メソッドの制御に使用されます)
存在しないphpメソッドを実行する場合
index.php:
コードは以下の通りです:
define('BASEDIR',__DIR__); //ルートディレクトリ定数を定義します
BASEDIRをインクルードします。'/Common/Loader.php';
spl_autoload_register('\Common\Loader::autoload');
$obj = new CommonObject();
//存在しないphpメソッドを実行する場合
$obj->test('hello',123);
index.php を実行すると、致命的なエラーが報告されます: Fatal error: Call to un 未定義メソッド CommonObject::test() in D:practisephpdesignpsr0index.php on line 9
Common/Object で __call メソッドを定義すると、メソッドが存在しないときに自動的にコールバックされます。
コードは以下の通りです:
名前空間 Common;
クラスオブジェクト{
function __call($func, $param){ //$funcメソッド名$paramパラメータ
var_dump($func, $param);
return "magic functionn"; // 戻り値として文字列を返します
}
}
index.php
コードは以下の通りです:
define('BASEDIR',__DIR__); //ルートディレクトリ定数を定義します
BASEDIRをインクルードします。'/Common/Loader.php';
spl_autoload_register('\Common\Loader::autoload');
$obj = new CommonObject();
//存在しないphpメソッドを実行する場合
echo $obj->test('hello',123);
ページ出力:
コードは以下の通りです:
文字列「テスト」(長さ=4)
配列
0 => 文字列 'hello' (長さ=5)
1 => int 123
魔法の機能
存在しない静的メソッドを呼び出す場合
Common/Object.php
コードは以下の通りです:
名前空間 Common;
クラスオブジェクト{
静的関数 __callStatic($name, $arguments) {
var_dump($name, $arguments);
return "magic functionn"; // 戻り値として文字列を返します
}
}
注: __callStatic メソッドも静的メソッドとして宣言する必要があります
index.php
コードは以下の通りです:
define('BASEDIR',__DIR__); //ルートディレクトリ定数を定義します
BASEDIRをインクルードします。'/Common/Loader.php';
spl_autoload_register('\Common\Loader::autoload');
//存在しない静的メソッドを実行する
echo CommonObject::test("hello",1234);
Index.php を実行、ページ出力:
コードは次のとおりです:
文字列「テスト」(長さ=4)
配列
0 => 文字列 'hello' (長さ=5)
1 => int 1234
魔法の機能
③ __toString: PHPオブジェクトを文字列に変換します
index.php
コードは以下の通りです:
define('BASEDIR',__DIR__); //ルートディレクトリ定数を定義します
BASEDIRをインクルードします。'/Common/Loader.php';
spl_autoload_register('\Common\Loader::autoload');
$obj = new CommonObject();
echo $obj;
この時点でエラーが報告されます: キャッチ可能な致命的なエラー: CommonObject クラスのオブジェクトを D:practisephpdesignpsr0index.php の 8 行目で文字列に変換できませんでした
Object.phpに__toStringメソッドを追加します
コードは以下の通りです:
名前空間 Common;
クラスオブジェクト{
関数__toString() {
__CLASS__を返す;
}
}
④ __invoke: PHPオブジェクトが関数として実行されると、このマジックメソッドがコールバックされます
index.php
コードは次のとおりです:
define('BASEDIR',__DIR__); //ルートディレクトリ定数を定義します
BASEDIRをインクルードします。'/Common/Loader.php';
spl_autoload_register('\Common\Loader::autoload');
$obj = new CommonObject();
echo $obj("test");
Object.php
コードは以下の通りです:
名前空間 Common;
クラスオブジェクト{
関数__invoke($param) {
var_dump($param);
「invoke」を返す;
}
}
ページ出力:
コードは次のとおりです:
文字列「テスト」(長さ=4)
呼び出す
。
ホット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)

ホットトピック









PHP 8.4 では、いくつかの新機能、セキュリティの改善、パフォーマンスの改善が行われ、かなりの量の機能の非推奨と削除が行われています。 このガイドでは、Ubuntu、Debian、またはその派生版に PHP 8.4 をインストールする方法、または PHP 8.4 にアップグレードする方法について説明します。

CakePHP でデータベースを操作するのは非常に簡単です。この章では、CRUD (作成、読み取り、更新、削除) 操作について理解します。

ファイルのアップロードを行うには、フォーム ヘルパーを使用します。ここではファイルアップロードの例を示します。

CakePHP は、PHP 用のオープンソース フレームワークです。これは、アプリケーションの開発、展開、保守をより簡単にすることを目的としています。 CakePHP は、強力かつ理解しやすい MVC のようなアーキテクチャに基づいています。モデル、ビュー、コントローラー

CakePHP へのログインは非常に簡単な作業です。使用する関数は 1 つだけです。 cronjob などのバックグラウンド プロセスのエラー、例外、ユーザー アクティビティ、ユーザーが実行したアクションをログに記録できます。 CakePHP でのデータのログ記録は簡単です。 log()関数が提供されています
