PHP
クラス
前回に引き続いて今回もクラスについて記述していきたいと思います。
クラスのオブジェクトの比較
クラスのオブジェクト同士をif文などで比較すると
そのオブジェクトが同じクラスから作成されたのか、別のクラスから作成されたのかなどによって結果が変わってきます。
オブジェクトの比較をしてみる
以下では testa というクラスと testb というクラスを作成して、
同一クラスから作成したオブジェクトだとどうなるか、異なるクラスから作成したオブジェクトの場合はどうなるかを比較しています。
<?php class testa { public $a; } class testb { public $a; } function class_diff($obj1, $obj2){ echo "$obj1 == $obj2 :"; if($obj1 == $obj2){ echo "True.<br />"; } else { echo "False<br />"; } echo "$obj1 != $obj2 :"; if($obj1 != $obj2){ echo "True.<br />"; } else { echo "False<br />"; } echo "$obj1 === $obj2 :"; if($obj1 === $obj2){ echo "True.<br />"; } else { echo "False<br />"; } echo "$obj1 !== $obj2 :"; if($obj1 !== $obj2){ echo "True.<br />"; } else { echo "False<br />"; } } $testa1 = new testa(); $testa2 = $testa1; $testa3 = new testa(); $testb1 = new testb(); echo "------ testa1, testa1 ------<br />"; class_diff($testa1, $testa1); echo "------ testa1, testa2 ------<br />"; class_diff($testa1, $testa2); echo "------ testa1, testa3 ------<br />"; class_diff($testa1, $testa3); echo "------ testa1, testb1 ------<br />"; class_diff($testa1, $testb1); ?>
この結果からわかるように == を用いて比較した際には、
同じクラスから作成したオブジェクトであれば True になります。
また === を用いて比較した際には
同じクラスから作成したオブジェクトでかつ同じインスタンスを参照している場合にのみ True になります。
タイプヒンティング
クラスではタイプヒンティングというものを使用して、
メンバメソッドなどで受け取る引数のクラスなどを指定することができる。
指定されていないクラスなどを引数で受け取るとエラーメッセージを表示する。
<?php class test01 { public function type_test(test02 $testobj){ //test02クラスのオブジェクトのみ受け取るように指定する echo $testobj->var; } } class test02 { public $var = 100; } $test01obj = new test01(); $test02obj = new test02(); $test03obj = new test03(); $test01obj->type_test($test02obj); ?>
だが以下のように指定していないクラスのオブジェクトを渡そうとするとエラーになる
<?php class test01 { public function type_test(test02 $testobj){ //test02のクラスのオブジェクトのみ受け取るように指定する echo $testobj->var; } } class test02 { public $var = 100; } class test03 { public $var = 200; } $test01obj = new test01(); $test02obj = new test02(); $test03obj = new test03(); $test01obj->type_test($test02obj); $test01obj->type_test($test03obj); //ここで指定していないオブジェクトを引数で渡してみる ?>
今回はここまでで次回からもクラスについて記載していきたいと思います。