ホームページ > バックエンド開発 > PHPチュートリアル > PHP 5.0におけるオブジェクトオーバーロード技術の研究_PHPチュートリアル

PHP 5.0におけるオブジェクトオーバーロード技術の研究_PHPチュートリアル

WBOY
リリース: 2016-07-13 17:32:14
オリジナル
780 人が閲覧しました

テキスト/コンパイル: Zhu Xianzhong

1. はじめに

幸いなことに、php (現​​在の主流の開発言語として) 5.0 でオブジェクト オーバーロード テクノロジが導入されました。この記事では、メソッド __call()、__set()、および __get() をオーバーロードする可能性について検討します。オーバーロード理論について簡単に説明した後、2 つの例を通して本題に進みます。最初の例は永続ストレージ クラスを実装する例で、2 番目の例は動的ゲッター/セッターを実装する方法を見つけることです。

2. オブジェクトのオーバーロードとは何ですか?

php(現在主流の開発言語として)でオブジェクトのオーバーロードについて話すとき、次の2種類を区別する必要があります:

・メソッドのオーバーロード

・属性のオーバーロード

メソッドのオーバーロードの場合 次に、マジック メソッド __call() を定義します。これは、対応するクラスの未定義メソッドへの一般呼び出しを実装します。この一般メソッドは、クラス内の未定義のメソッドにアクセスする場合にのみ呼び出されます。メソッドのオーバーロードがない場合、次の例では php (現​​在の主流の開発言語として) に致命的なエラー メッセージが表示されます: Call to un 未定義のメソッド ThisWillFail::bar() in/some/directory/example 。 (現在の主流の開発言語として) 9行目でプログラムの実行を中止します: (現在の主流の開発言語として)

class ThisWillFail { public function foo() {
return "Hello World!";
}
}
$class = new ThisWillFail;
$class->bar();
?>

メソッドのオーバーロードの助けを借りて、コードはこの呼び出しをキャッチし、適切に処理することができます。

属性のオーバーロードはメソッドのオーバーロードと似ています。この場合、クラスは、クラス内で明示的に定義されていないクラスのプロパティに読み取り/書き込み操作をリダイレクトします (プロキシとも呼ばれます)。ここでの特殊なメソッドは __set() と __get() です。エラー報告のレベルに応じて、PHP トランスレータは通常、未定義のプロパティにアクセスしたときに通知を発行するか、変数を延期して潜在的に定義します。属性のオーバーロードを使用する場合、トランスレーターは、未定義の属性を設定するときに __set() を呼び出し、未定義の属性値にアクセスするときに __get() を呼び出すことができます。

要約すると、php

(現​​在の主流の開発言語として) などの動的言語を使用する場合、オーバーロード テクノロジを使用すると、ソフトウェア開発時間を大幅に短縮できます。
これは理論的な導入であり、以下で具体的なコーディングを分析してみましょう。 3. 永続ストレージクラスの例

次のコードは、属性オーバーロード技術を使用し、50 行未満の php

(現​​在の主流の開発言語として)

種類を使用して、上記の永続ストレージを実装します。永続的という用語は、クラスがデータ構造から要素を記述でき、基礎となるストレージ システムとの同期を維持できることを意味します。コーディング用語では、外部コードはクラスを使用してデータベース テーブルから行を選択できます。このようにして、プログラムの実行中に、クラスの属性に直接アクセスして、行内の要素を操作 (読み取り/フェッチ) できます。スクリプトの最後で、php

(現在の主流の開発言語として)

は、更新された行データをデータベースに送り返す役割を果たします。 次のコードを注意深く研究すると、属性のオーバーロードとは何かを理解するのに役立ちます。

<?php(現在の主流の開発言語として)
//PEARのをロードするDBパッケージ</a>
require_once "DB.php(現在の主流の開発言語として)";
class Persistable {
private $data = array();
private $table = "users" ;
public function __construct ($user) {
$this->dbh = DB::Connect("MySQL(PHPとのベストな組み合わせ)://user:password@localhost/database");
$ query = "SELECT id, name 、メール、国 FROM " .
$this->table . " WHERE name = ?";
$this->data = $this->dbh->getRow($query, array($ user),
DB_FETCHMODE_ASSOC);
}
public function __get($member) {
if (isset($this->data[$member])) {
return $this->data[$member];
}
}
public function __set($ member, $value) {
//データセットのIDは読み取り専用です
if ($member == "id") {
return;
}
if (isset($this->data [$member]) ) {
$this->data[$member] = $value;
}
}
public function __destruct() {
$query = "UPDATE " . $this->table . " SET name = ?,
email = ?, 国 = ? WHERE id = ?";
$this->dbh->query($query, $this->name, $this->email,

www.bkjia.comtru​​ehttp://www.bkjia.com/PHPjc/508726.html技術記事テキスト/編集: Zhu Xianzhong 1. はじめに 幸いなことに、オブジェクト オーバーロード テクノロジは、(現在の主流の開発言語として) PHP 5.0 で導入されました。この記事では、__call()、__set()、__get() メソッドについて説明します...

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート