1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
<?php
/* ----------------------------------------------------------------------------------
* クラス・オブジェクト:特殊関数マジックメソッド:__getメソッド、__setメソッドの例
* 2015.10.15 作成 yoshi of CXMedia Inc.
* ----------------------------------------------------------------------------------
*/
header("Content-type:text/plain; charset=UTF-8");
/* ------------------------------------------------------------------
* PHPのクラスに定義されてないプロパティを参照、又は値を代入しようとすると
* 自動的にそのプロパティが生成されるため、それを制限するために
* __getメソッド、__setメソッドを宣言
* ------------------------------------------------------------------- */
/* -------------------
* クラスの構成
* ------------------- */
//「動物」クラス
class Animal {
//プロパティ
public $kind; //種別名
public $sex; //性別
public $age; //年齢
// public $weight; //体重
//未定義のプロパティ代入時のメソッド
public function __set($name, $value) {
echo "{$name}は定義されていません。\n";
}
//未定義のプロパティ参照時のメソッド
public function __get($name) {
echo "{$name}は定義されていません。代わりにNULLを返します。\n";
return NULL;
}
}
/* --------------
* クラスの利用
* -------------- */
// オブジェクト作成:
$lion = new Animal();
//定義されている変数への代入:「__set()が呼び出される」
$lion->kind = "ライオン";
$lion->age = 10;
$lion->sex = "オス";
//定義されている変数の参照:「 __get()が呼び出される」
echo "この動物は{$lion->kind}で{$lion->age}才の{$lion->sex}です。\n";
//定義されていない変数への代入:「__set()が呼び出される」
$lion->weight = 150;
//定義されている変数の参照:「 __get()が呼び出される」
echo "この動物は{$lion->kind}で体重は{$lion->weight}kgです。\n";
?>