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
57
58
59
60
61
62
63
64
65
66
67
68
69
<?php
/* ----------------------------------------------------------------------------------
 *  クラス・オブジェクト:-- ◆クラスの理解のためのプログラム構成◆ --の例
 *  2015.10.11 作成 yoshi of CXMedia Inc.
 * ----------------------------------------------------------------------------------
 */

// ---クラス--- //
class Hello_class{
    
// -----プロパティ(Property)---------------------------
    /* クラス内で定義された変数
     * publicは、アクセス修飾子で、どこからでもアクセス可能
     * ------------------------------------------------------ */
    
public $name;
    
    
// ----------コンストラクタ(Constructor)------------------------------------
    /* インスタンス化したときに自動的に呼び出され、変数を初期化する場合に利用。
     * クラスの引数がnull(デフォルト)の時、引数上で、$name="CXMedia"の様に設定
     * クラス内でクラス名と同じ名前のメソッドでも良い。
     * "this"は、(クラスの)インスタンス化された自分自身を表す。
     * ------------------------------------------------------------------------- */
    
function __construct($name="CXMedia"){
        
$this->name $name;
    }
    
    
// ------メソッド(Method)-------------------
    /* アクセス修飾子の省略値は「public」と同様
     * ----------------------------------------- */
    
function DisplayHello(){
        echo 
"こんにちは、".$this->name."さん。<br>";
    }
}

// ---継承のクラス--- //
/* --------------------------------------------------------------------------
 * Hello_class2の中でHello_classのDisplayHello ( )メソッドが定義されているが、
 * 同じ名前のメソッドが定義されていると、オーバーライド(Override)されて
 * Hello_class2の方のメソッドが有効になり、それ以外のプロパティ、メソッドは
 * 継承されたまま。Hello_class::DisplayHello ( )のように子クラスから直接
 * 親クラスのメソッドを呼び出せる。 「::」は、スコープ定義演算子と呼ぶ。
 * -------------------------------------------------------------------------- */
class Hello_class2 extends Hello_class {
    function 
DisplayHello( ) {
        echo 
"あなたは誰?";
        
Hello_class::DisplayHello( );
    }
}

// ---インスタンス(オブジェクト)--- //
/* ---------------------------------------------------------------------------
 * new キーワードでクラス Hellow_classをインスタンス化して、$obj1と$obj2は、
 * 初期データ(引数)でコンストラクタ実行したものがセットされる
 * --------------------------------------------------------------------------- */
$obj1 = new Hello_class"StarLight" );
$obj2 = new Hello_class();

// publicのプロパティは、「インスタンスと"->"オブジェクト演算子付き変数名」を指定で利用
echo $obj1->name,'<br>';
echo 
$obj2->name,'<br>';


// メソッドは、「インスタンスと"->"オブジェクト演算子付き関数名」を指定して、実行
$obj1->DisplayHello( );
$obj2->DisplayHello( );

// ---インスタンス・オブジェクト--- //
$obj3 = new Hello_class2"Sunrise" );
$obj3->DisplayHello( );
?>