1.クラスとは?
そんなもんわかっとるわ!と思うかもしれませんが、
いざ説明しようとするといい回答が出てきません。
オブジェクトの塊です(雑)。
実際、一言では説明ができないので、実際に書いていきましょう。
2.public
下記では、基本的なクラスの定義を書いています。
<?php
class classTest
{
public function publicMethod(){
return 'Publicメッセージ';
}
private function privateMethod(){
return 'Privateメッセージ';
}
protected function protectedMethod(){
return 'Protectedメッセージ';
}
}
?>
<?php
require_once(__DIR__ . '/classTest.php');
$app = new classTest();
echo $app->publicMethod();
?>
public:どこからでもアクセス可能。
private:同じクラス内からのみアクセス可能。
protected:クラス自身・継承クラスからアクセス可能。
今回、test_sample.phpを実行した場合
『Publicメッセージ』が出力されるはずです。
3.private
では、privateではどうか?
<?php
require_once(__DIR__ . '/classTest.php');
$app = new classTest();
echo $app->privateMethod();
?>
下記のエラーが出ます。
Fatal error: Uncaught Error: Call to private method 〜
下記のメソッドを追加すればうまくいくはずです。
public function method(){
$message = $this->privateMethod();
return $message;
}
<?php
require_once(__DIR__ . '/classTest.php');
$app = new classTest();
echo $app->method();
?>
これで『Privateメッセージ』が出力されるはずです。
4.protected
次がprotectedのお話。
上記のprivateと同じ挙動はします。
+αのお話をしていきます。
継承クラスからアクセスしてみましょう。
継承とは、親クラスの処理を子クラスで使うことができることです。
では、子クラスを作成して親クラスを継承していきましょう。
下記を追加します。
class childClass extends classTest
{
public function publicMethod(){
return '新Publicメッセージ';
}
public function method(){
$message = $this->publicMethod();
return $message;
}
}
<?php
require_once(__DIR__ . '/classTest.php');
$app = new childClass();
echo $app->method();
?>
今回、childClassとclassTestでメソッドが重複している場合、
childClassのメソッドに上書きされます。
このことをオーバーライドと呼びます。
この場合は『新Publicメッセージ』が出力されます。
では、話に戻ります。
子クラスからprotectedのメソッドを呼びます。
class childClass extends classTest
{
public function method(){
$message = $this->protectedMethod();
return $message;
}
}
これで、『Protectedメッセージ』が出力されるはずです。