1_Lớp
Một lớp là một tập hợp của các biến và các hàm làm việc trong các biến này. Một lớp được định nghĩa sử dụng cú pháp sau:
<?php class Cart {
var $items; // Items in our shopping cart
// Add $num articles of $artnr to the cart function add_item ($artnr, $num) { $this->items[$artnr] += $num; }
// Take $num articles of $artnr out of the cart function remove_item ($artnr, $num) { if ($this->items[$artnr] > $num) { $this->items[$artnr] -= $num; return true; } else { return false; } } } ?>
Điều này định nghĩa một lớp có tên là Cart gồm có một mảng kết hợp các thực phẩm trong cái xe chở và hai hàm để thêm và loại bỏ các phần tử từ cái xe chở này.
Chú ý: Trong PHP4, chỉ có các khởi tạo hằng cho các biến var là được phép. Dùng các hàm khởi tạo cho các khởi tạo không là hằng số.
/* None of these will work in PHP 4. */ class Cart {
var $todays_date = date("Y-m-d"); var $name = $firstname;
var $owner = 'Fred ' . 'Jones'; }
/* This is how it should be done. */ class Cart { var $todays_date; var $name; var $owner; function Cart() { $this->todays_date = date("Y-m-d"); $this->name = $GLOBALS['firstname']; /* etc. . . */ } }
Các lớp là các kiểu , do vậy, chúng là bản kế hoạch cho các biến thật sự. Ta phải tạo một biến có kiểu mong muốn với toán tử new.
$cart = new Cart;
$cart->add_item("10", 1);
Điều này tạo một đối tượng $cart của lớp Cart. Hàm add_item() của đối tượng đó đang được gọi để thêm một phần tử của thực phẩm số 10 vào xe chở.
Các lớp có thể được mở rộng tới các lớp khác. Lớp được thừa hưởng hoặc được mở rộng có tất cả các biến và các hàm của lớp cơ sở và những gì bạn thêm vào định nghĩa được mở rộng. Điều này được thực hiện bằng cách dùng từ khoá extend. Đa thừa kế không được hỗ trợ.
class Named_Cart extends Cart { var $owner;
function set_owner ($name) { $this->owner = $name; }
}
Điều này định nghĩa một lớp Named_Cart mà có tất cả các biến và các hàm của Cart cộng với một biến thêm $owner và một hàm thêm set_owner(). Ta tạo một xe chở được chỉ định theo cách thông thường và bây giờ có thể thiết lập và lấy chủ của xe chở. Ta cũng có thể sử dụng các hàm xe chở thông thường trên các xe chở được chỉ định:
$ncart = new Named_Cart; // Create a named cart $ncart->set_owner ("kris"); // Name that cart
print $ncart->owner; // print the cart owners name
$ncart->add_item ("10", 1); // (inherited functionality from cart)
Bên trong các hàm của một lớp biến $this có ý nghĩa là đối tượng này. Ta phải dùng $this- >something để truy nhập đến bất kỳ biến nào hoặc hàm nào được đặt tên something trong đối tượng hiện thời. Cả bên trong lẫn bên ngoài của đối tượng ta không cần một dấu $ khi truy nhập vào các thuộc tính của một đối tượng.
$ncart->owner = "chris"; // no $ $ncart->$owner = "chris";
// this is invalid because $ncart->$owner = $ncart->"" $myvar = 'owner';
$ncart->$myvar = "chris";
// this is valid because $ncart->$myvar = $ncart->owner
Các hàm khởi tạolà các hàm trong một lớp và được gọi một cách tự động khi ta tạo một thể hiện mới của một lớp. Một hàm trở thành một hàm khởi tạo khi nó có cùng tên với tên của lớp.
class Auto_Cart extends Cart { function Auto_Cart () { $this->add_item ("10", 1); }
}
Điều này định nghĩa một lớp Auto_Cart đó là một Cart thêm một hàm khởi tạo mà khởi tạo một xe chở với một phần tử thực phẩm số “10” mỗi lần một Auto_Cart được tạo với từ “new”. Các hàm khởi tạo cũng có thể đưa ra các đối số và các đối số này có thể được tuỳ chọn, nó tạo cho chúng sự thuận tiện nhiều hơn.
class Constructor_Cart extends Cart {
function Constructor_Cart ($item = "10", $num = 1) { $this->add_item ($item, $num);
}} }
// Shop the same old boring stuff. $default_cart = new Constructor_Cart; // Shop for real...
$different_cart = new Constructor_Cart ("20", 17);
Chú thích
Đối với các lớp được thừa kế, hàm khởi tạo của lớp cha không được gọi một cách tự động khi hàm khởi tạo của lớp được thừa kế được gọi.