IX CÁC LỚP VÀ CÁC ĐỐI TƯỢNG 1_Lớp

Một phần của tài liệu Tài liệu Kỹ thuật lập trình căn bản pdf (Trang 52 - 54)

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. . . */ }

$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. (adsbygoogle = window.adsbygoogle || []).push({});

class Auto_Cart extends Cart { function Auto_Cart () { $this->add_item ("10", 1); }

}

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.

Một phần của tài liệu Tài liệu Kỹ thuật lập trình căn bản pdf (Trang 52 - 54)