Web的な何か

JavaとかPHPとかやってます。最近はAndroidばっかやってます。

classとか気づいたこと

今までclassについて深く勉強していなかったので、改めて確認してみることにした。
今回簡単に作ってみたclassは以下の通り。
動作は"createArray"で作られた列をforeachで一覧に出力している。

//classのテスト
class Test
{
    public static $staticTest = "staticの動作テスト\n";

    public function createArray()
    {
        $res = array(
            "列一個目",
            "列二個目",
            "列三個目",
            "列四個目"
        );
        return $res;
    }

  public function testEcho()
    {
        $array = $this->createArray();
        foreach ($array as $val){
            echo $val, "\n";
        }
    }
}


作ったclassをこのように呼び出してみた。

echo Test::$staticTest;//staticのテスト
$class = new Test();//オブジェクトの読み込み
$class->testEcho();//class内関数の呼出

一行目はスコープ演算子を利用して変数を出力させていて、二行目は$classにインスタンスを生成してオブジェクトとして読み込ませており、三行目でアロー演算子を利用してclass内の関数を呼び出している。

これらを動作させると、このように表示される。

staticの動作テスト
列一個目
列二個目
列三個目
列四個目

"Test::$staticTest"の部分はスコープ定義演算子というものらしく、staticや定義されたメソッドなどをインスタンスの生成をしなくても呼び出すことができるそうだ。
もちろん、staticなどが含まれていないメソッドを呼び出すとエラーが出る。


クラスの継承
次にclassの継承についても学習してみた。
今回は先ほど作った"Test"classを継承して以下のclassを作る。

//class 継承
class TestEX extends Test
{
    public function createArray()
    {
        $res = array(
          "EX1個目",
          "EX2個目",  
          "EX3個目",
          "EX4個目"
        );
        
        return $res;
    }
}

内容は簡単で、先ほどのclass内に存在している"createArray"をオーバーライドしている。

オーバーライド:
継承する親classのメソッドを上書きすること


継承したclassを以下のように利用してみた。

echo TestEx::$staticTest//コメント受けて追加してみました
$exTest = new TestEx();
echo $exTest->testEcho();

一行目でインスタンスを生成し、二行目でオーバーライドした関数を呼び出している。
出力は以下に変化する。

EX1個目
EX2個目
EX3個目
EX4個目