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";
?>