LoginSignup
1
1

More than 3 years have passed since last update.

【PHP】オブジェクト指向を学ぶ[その2]

Posted at

セッター、ゲッターについて

まずはコード。

index.php
<?php

//クラス定義
class Self_Introduction{

    // プロパティー
    // 変数定義
    private $name;
    private $age;

    function setName($name){
        $this->name = (string)filter_var($name);
    }

    function setAge($age){
        $this->age = filter_var($age, FILTER_VALIDATE_INT);
    }

    function getName(){
        return "私の名前は{$this->name}です。<br>";
    }

    function getAge(){
        return "年齢は{$this->age}才です。";
    }

}

// インスタンス生成
$user = new Self_Introduction();

// セッター
$user->setName('太朗');
$user->setAge(35);

// ゲッター
echo $user->getName(); //私の名前は太朗です。
echo $user->getAge(); //年齢は35才です。

解説

見ての通りです。
まずインスタンスを生成し、class内にあるset〇〇にアクセスします。
その後get〇〇で表示しています。

このset〇〇と言うのをセッター。get〇〇と言うのをゲッターと言います。
__constructを定義しその中で値をセッターを使用することも可能です。

改訂したのがこちら。

__consutruc内でセッターを呼び出す

index.php
<?php

//クラス定義
class Self_Introduction{

    // プロパティー
    // 変数定義
    private $name;
    private $age;


    // インスタンスが生成されると同時に処理が走る
    function __construct($name, $age){
        $this->setName($name);
        $this->setAge($age);
    }

    function setName($name){
        $this->name = (string)filter_var($name);
    }

    function setAge($age){
        $this->age = filter_var($age, FILTER_VALIDATE_INT);
    }

    function getName(){
        return "私の名前は{$this->name}です。<br>";
    }

    function getAge(){
        return "年齢は{$this->age}才です。";
    }
}

// インスタンス生成
$user = new Self_Introduction("太郎", 35);

// ゲッター
echo $user->getName();
echo $user->getAge();

このようにすればわざわざセッターを呼び出す必要がなくなります。
と言うのもインスタンス生成時に__construcrが呼び出されるので中の処理にセッターを呼び出すコードを書いておけば、インスタンス生成時にセッターの処理が走ります。

継承

次は継承です。
その時の通り受け継ぎます。
何を?
classを受け継ぐことができます。

例えば新しいclass02を作りたい。
でもclass01とほとんど同じで変わるのは__constructが少しとメソッドを追加するくらい。

そんな時に継承が使えます。

index.php
class Sub_Introduction extends Self_Introduction{
    //class 新クラス extends 引継ぎたいclass{}
}

コードはこんな感じ。

では実際に先ほどのclassを継承して「血液型はA型です」と表示させます。

index.php
<?php

//クラス定義
class Self_Introduction{

    // プロパティー
    // 変数定義
    private $name;
    private $age;


    // インスタンスが生成されると同時に処理が走る
    public function __construct($name, $age){
        $this->setName($name);
        $this->setAge($age);
    }

    private function setName($name){
        $this->name = (string)filter_var($name);
    }

    private function setAge($age){
        $this->age = filter_var($age, FILTER_VALIDATE_INT);
    }

    function getName(){
        return "私の名前は{$this->name}です。<br>";
    }

    function getAge(){
        return "年齢は{$this->age}才です。<br>";
    }
}

class Sub_Introduction extends Self_Introduction{

    private $blood;

    public function __construct($name, $age, $blood){
        parent::__construct($name, $age);
        $this->setBlood($blood);
    }

    private function setBlood($blood){
        $this->blood = (string)filter_var($blood);

    }

    public function getBlood(){
        return "血液型は{$this->blood}です。";
    }
}

// インスタンス生成
$user = new Sub_Introduction("太郎", 35, "A型");

// ゲッター
echo $user->getName(); //私の名前は太郎です。
echo $user->getAge(); //年齢は35才です。
echo $user->getBlood(); //血液型はA型です。

解説

結果から見ると子class Sub_Introductionが親class Introductionを継承しているのが分かります。

どう言う流れなのか見ていきます。

$user = new Sub_Introduction("太郎", 35, "A型");
インスタンスが生成され、同時にconstructに処理が走り、中にあるparent::~~で親classの__constructも同時に呼び出されます。
すると、親classのセッターと子classのセッターが処理されます。

そして、最後ゲッターをechoで呼び出し表示されると言った流れです。

※何か間違っていること、これも覚えておいた方がいいと言うことがあれば是非教えてください

1
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
1
1