學習軌道
/
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 物件實例並更新自身的屬性。

<?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 物件實例並更新自身的屬性。

<?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,全部免費。