ホームページ >バックエンド開発 >PHPチュートリアル >PHP マジック メソッドの使用例_PHP チュートリアル

PHP マジック メソッドの使用例_PHP チュートリアル

WBOY
WBOYオリジナル
2016-07-13 09:49:21807ブラウズ

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)

呼び出す

www.bkjia.comtru​​ehttp://www.bkjia.com/PHPjc/1020268.html技術記事 PHP マジックメソッドの使用例 この記事では主に、__get、__set、__call、__callStatic、__toString、__invoke などのマジックメソッドの使用例を紹介します...
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。