クラスは、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 └──────────────────────┘ ║
║ ║
║ ║
╚════════════════════════════════════════════════════════════╝
用意されているクラスのひな型を使って、y、x、height、widthの値に対応するプロパティを用意しましょう。
<?php
$window = new ProgramWindow();
$window->y; // => null
$window->x; // => null
$window->height; // => null
$window->width; // => null
ProgramWindowのコンストラクター関数を定義しましょう。
引数は受け取りませんが、コンストラクターの実行時にプロパティのデフォルト値を設定します。
yとxの初期値は0に設定します。
heightとwidthの初期値は、600x800の画面サイズに設定します。
<?php
$window = new ProgramWindow();
$window->y; // => 0
$window->x; // => 0
$window->height; // => 600
$window->width; // => 800
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
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