類別是 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 物件實例並更新自身的屬性。
<?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 物件實例並更新自身的屬性。
<?php
$window = new ProgramWindow();
$position = new Position(80, 313);
$window->move($position)
$window->y;
// => 80
$window->x;
// => 313