見出し画像

6day

クラスをインスタンス化するには、new キーワードを使う。
インスタンス名 = new クラス名();
$task1 = new Task()
$task2 = new Task()
$task3 = new Task()

インスタンスが持つプロパティにアクセス。
インスタンス → プロパティ名;
インスタンスのメソッドを呼び出すことができる。
インスタンス名 → メソッド名(引数1,引数2);

◇ インスタンスを別のクラスに渡す ◇
インスタンスは、オブジェクト型というデータ型・・・
基本データ型の変数と同じように関数やメソッドの引数に渡すことができる。

ーーーほんとはメソッド内で出力しないーーー
実際には、メソッド内では出力しない。return 文で表示したい内容のみを返すのが原則。
→ テキスト形式での出力、HTML形式での出力、ログ出力、メール送信 などの出力方針があるため
呼び出し側の main.php で決めたほうが汎用的に使用できる。
なぜ、TaskSheetクラスに表示する処理を持たせたのか・・・・

<?php
declare(strict_types=1);
/*///////////////////////////////////////

    Task クラス

*////////////////////////////////////////

class Task
{
    public $name;
    public $priorty;
    public $progress;

    public function shoTaskNmae() : string
    {
        if($this->progress >= 100)
        {
            return '' . $this->name . '</b>';
        }
        else
        {
            return $this->name;
        }
    }
}

とすると。。。わざわざ isCompletedメソッドを作る必要もなかったはずと考えてしまうしかししてはいけない。  → 役割がちがうため。
Taskクラス → 視覚的要素には責任を持たない。
TaskSheetクラス → 役割は表示する。
◇ コンストラクター ◇
クラスがインスタンス化されるときに呼び出される特殊なメソッド
コンストラクターは主にプロパティ値を初期化するために用いられる。

アクセス修飾
public → どこからでもアクセス可能
protected → 自クラス 子クラスのみアクセス可能
private → 自クラスのみ
アクセス権はゆるければエラーが出にくくなっていいのでは? → アクセス権はできる限り厳しくするとオブジェクト指向のメリットを最大限に生かせれる。
ーーーリモコンーーー
室温を上げる - public
室温下げる - public
エアコン本体に赤外線を送る - public
ーーーーーーーーーーー
リモコンを利用したい人は、上げると下げるの2つのみ意識したいのに → 赤外線を送るまで意識しないといけない


☆ 意識しないように アクセス制限を厳しくする ☆
ーーーリモコンーーー
室温を上げる - public
室温下げる - public
エアコン本体に赤外線を送る - private
ーーーーーーーーーーー
アクセス制限することで利用者が意識しなくてもいいものなのか明確に伝える意味で役に立ちます。
利用者がしらなくてもいい情報(メソッド)は → private protected で視界から遠ざける
◇ クラス図でのアクセス修飾子の表し方 ◇

  • public プロパティ、メソッド

  • protected プロパティ、メソッド

  • private プロパティ 、メソッド

◇ アクセサメソッド ◇

  • ゲッターメソッド → プロパティを読み出すためのメソッド → getxxx()とつける

  • セッターメソッド →プロパティを書き込むためのメソッド → setxxx() とつける

Task クラスのプロパティを private で定義、
アクセサメソッド経由で読み書きさせる例 ↓
main.php

<?php declare(strict_types=1); ?>
<body>
<?php
//  new Taskで波線でても気にしない。
    require_once dirname(__FILE__) . '/Task.php';


    $task = new Task();
//--------------------- name ---------------------------
    $task->setName('パスポートの更新');
    print 'タスク名:' . $task->getName() . '<br>';
    
//--------------------- progress ---------------------------
// タスクの進行度 → 120% にする
    $task->setProgress(120);
    print '進行度' . $task->getProgress() . '<br>';
// タスクの進行度 → 80%した後、0% に戻す
    $task->setProgress(80);
    $task->clearProgress();
    print '進行度' . $task->getProgress() . '<br>';
    
//--------------------- ステータス ---------------------------
// タスクの進行度 → 完了 にする
    $task->completeProgress();
    print '進行度' . $task->getProgress() . '<br>';


?>
</body>


Task.php

<?php
declare(strict_types=1);

class Task 
{
    // タスク名
    private $name;
    // 進行度
    private $progress;
    // 外に知られたくないトークン
    private $secret;
 
//--------------------- name ---------------------------
// name ゲッターメソッド(読み出す)
    public function getName() : string
    {
        return $this->name;
    }
// name セッターメソッド(書き出す)
    public function setName(string $name) : void
    {
        $this->name = $name;
    }
    
//--------------------- progress ---------------------------
// progress ゲッターメソッド(読み出す)
    public function getProgress(): int
    {
        return $this->progress;
    }
// progress セッターメソッド(書き出す)
    public function setProgress(int $progress) : void
    {
        if($progress < 0)
        {
            $progress = 0;
        }
        elseif($progress > 100)
        {
            $progress = 100;
        }
        $this->progress = $progress;
    }
    
//--------------------- ステータス ---------------------------
// タスクを完了ステータスにする。
    public function completeProgress() : void
    {
        $this->progress = 100;
    }
// タスクを未完了ステータスにする。
    public function clearProgress() : void
    {
        $this->progress = 0;
    }
}



コメント


やっとオブジェクト指向。。。
クラス。。。コンストラクタ。。。修飾子。。
ここからまだまだむずかしくなる。。。

この記事が気に入ったらサポートをしてみませんか?