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個目