0
1

More than 3 years have passed since last update.

PHPのクラス・メソッド

Last updated at Posted at 2020-05-06

1.クラスとは?

そんなもんわかっとるわ!と思うかもしれませんが、
いざ説明しようとするといい回答が出てきません。
オブジェクトの塊です(雑)。
実際、一言では説明ができないので、実際に書いていきましょう。

2.public

下記では、基本的なクラスの定義を書いています。

classTest.php
<?php

class classTest
{
    public function publicMethod(){
        return 'Publicメッセージ';
    }

    private function privateMethod(){
        return 'Privateメッセージ';
    }

    protected function protectedMethod(){
        return 'Protectedメッセージ';
    }

}

?>
test_sample.php
<?php

require_once(__DIR__ . '/classTest.php');

$app = new classTest();
echo $app->publicMethod();

?>

public:どこからでもアクセス可能。
private:同じクラス内からのみアクセス可能。
protected:クラス自身・継承クラスからアクセス可能。

今回、test_sample.phpを実行した場合
『Publicメッセージ』が出力されるはずです。

3.private

では、privateではどうか?

test_sample.php
<?php

require_once(__DIR__ . '/classTest.php');

$app = new classTest();
echo $app->privateMethod();

?>

下記のエラーが出ます。

Fatal error: Uncaught Error: Call to private method 〜

下記のメソッドを追加すればうまくいくはずです。

classTest.php
public function method(){
        $message = $this->privateMethod();
        return $message;
}
test_sample.php
<?php

require_once(__DIR__ . '/classTest.php');

$app = new classTest();
echo $app->method();

?>

これで『Privateメッセージ』が出力されるはずです。

4.protected

次がprotectedのお話。
上記のprivateと同じ挙動はします。
+αのお話をしていきます。

継承クラスからアクセスしてみましょう。
継承とは、親クラスの処理を子クラスで使うことができることです。

では、子クラスを作成して親クラスを継承していきましょう。

下記を追加します。

classTest.php
class childClass extends classTest
{
    public function publicMethod(){
        return '新Publicメッセージ';
    }

    public function method(){
        $message = $this->publicMethod();
        return $message;
    }
}
test_sample.php
<?php

require_once(__DIR__ . '/classTest.php');

$app = new childClass();
echo $app->method();

?>

今回、childClassとclassTestでメソッドが重複している場合、
childClassのメソッドに上書きされます。
このことをオーバーライドと呼びます。
この場合は『新Publicメッセージ』が出力されます。

では、話に戻ります。
子クラスからprotectedのメソッドを呼びます。

classTest.php
class childClass extends classTest
{

    public function method(){
        $message = $this->protectedMethod();
        return $message;
    }
}

これで、『Protectedメッセージ』が出力されるはずです。

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1