トラック
/
PHP
PHP
/
演習
/
ウィンドウシステム
ウィンドウシステム

ウィンドウシステム

学習演習

はじめに

クラス

クラスは、PHPでコードを整理するための単位です。 あるものの振る舞いや、ある処理の振る舞いを表すコードは、クラスとしてまとめることができます。 クラスに割り当てられた関数は、慣習的にmethodsと呼ばれます。

<?php

class Door
{
    function lock()
    {
        // ...
    }

    function unlock()
    {
        // ...
    }
}

クラスはnewキーワードでインスタンス化します。これにより、そのクラスのインスタンス用のメモリが確保され、クラスのコンストラクターメソッドが呼び出されます。 インスタンス化したクラスは、変数に代入できます。 クラスのインスタンスのメソッドを呼び出すには、->アクセス演算子を使います。

<?php

$a_door = new Door();
$a_door->lock();
$a_door->unlock();

インスタンス化されたクラスは、特別な$this変数を使って自分自身のインスタンスを参照できます。 クラスはプロパティを持つこともできます。プロパティは、そのクラスのオブジェクトのインスタンスに結び付いた変数のように働きます。 これらのプロパティは、内部からも外部からも参照できます。

<?php

class Car
{
    public $color;

    function __construct($color)
    {
        $this->color = $color;
    }

    function getColor()
    {
        return $this->color;
    }
}

$a_car = new Car("red");
$a_car->color; // => "red" by accessing the property
$a_car->getColor(); // => "red" by invoking the instance method

説明

この演習では、ウィンドウシステムを基にしたコンピューターシステムをシミュレーションします。 移動したりサイズを変更したりできるウィンドウを作成します。 以下の図は、このあと扱う値のイメージを表しています。

 ╔════════════════════════════════════════════════════════════╗
 ║                                                            ║
 ║        position::$y,_                                      ║
 ║        position::$x  \                                     ║
 ║                       \<---- size::$width ---->            ║
 ║                 ^      *──────────────────────┐            ║
 ║                 |      │        title         │            ║
 ║                 |      ├──────────────────────┤            ║
 ║                 |      │                      │            ║
 ║          size::$height │                      │            ║
 ║                 |      │       contents       │            ║
 ║                 |      │                      │            ║
 ║                 |      │                      │            ║
 ║                 v      └──────────────────────┘            ║
 ║                                                            ║
 ║                                                            ║
 ╚════════════════════════════════════════════════════════════╝

1. プログラムウィンドウのプロパティを定義する

用意されているクラスのひな型を使って、y、x、height、widthの値に対応するプロパティを用意しましょう。

<?php

$window = new ProgramWindow();
$window->y; // => null
$window->x; // => null
$window->height; // => null
$window->width; // => null

2. プログラムウィンドウの初期値を定義する

ProgramWindowのコンストラクター関数を定義しましょう。 引数は受け取りませんが、コンストラクターの実行時にプロパティのデフォルト値を設定します。 yとxの初期値は0に設定します。 heightとwidthの初期値は、600x800の画面サイズに設定します。

<?php

$window = new ProgramWindow();
$window->y; // => 0 
$window->x; // => 0
$window->height; // => 600
$window->width; // => 800

3. ウィンドウのサイズを変更する関数を定義する

Size.phpに、Sizeクラスとなる新しいクラスを定義しましょう。 コンストラクターでは、heightとwidthプロパティを設定する引数を受け取ります。 さらにProgramWindowには、Sizeオブジェクトのインスタンスを受け取って自身のプロパティを更新するresize関数が必要です。

<?php 

$window = new ProgramWindow();
$size = new Size(764, 1080);
$window->resize($size)

$window->height;
// => 764
$window->width;
// => 1080

4. ウィンドウを移動させる関数を定義する

Position.phpに、Positionクラスとなる新しいクラスを定義しましょう。 コンストラクターでは、yとxプロパティを設定する引数を受け取ります。 さらにProgramWindowには、Positionオブジェクトのインスタンスを受け取って自身のプロパティを更新するmove関数が必要です。

<?php 

$window = new ProgramWindow();
$position = new Position(80, 313);
$window->move($position)

$window->y;
// => 80
$window->x;
// => 313
GitHubで編集する リンクは新しいウィンドウまたはタブで開きます
PHP Exercism

ウィンドウシステムを始める準備はできましたか?

Exercismに登録すれば、11個のコンセプト122個の演習、そして本物の人間によるメンタリングとともに、PHPを学んでマスターできます。すべて無料です。