PHP là một ngôn ngữ hướng đối tượng, mặc dù nó không nhất thiết phải được sử dụng như một ngôn ngữ vì hầu hết các hàm PHP không hướng đối tượng
Trong lập trình hướng đối tượng, một class
là định nghĩa của một đối tượng, trong khi một object
là một thể hiện của một đối tượng, nghĩa là từ một lớp bạn có thể tạo ra nhiều đối tượng
Ví dụ: hãy định nghĩa một lớp học sinh
class Student {
// constructor
public function __construct[$first_name, $last_name] {
$this->first_name = $first_name;
$this->last_name = $last_name;
}
public function say_name[] {
echo "My name is " . $this->first_name . " " . $this->last_name . ".\n";
}
}
$alex = new Student["Alex", "Jones"];
$alex->say_name[];
Hãy phân tích mã. Lưu ý rằng lớp Student
có hàm khởi tạo, hàm này được thực thi khi đối tượng được tạo. Hàm tạo nhận các đối số được cung cấp sau này khi xây dựng đối tượng bằng từ khóa new
Sau khi chúng ta đã xây dựng đối tượng thành biến $alex
, bây giờ chúng ta có thể sử dụng các phương thức của đối tượng
Chúng tôi đã triển khai một phương thức đối tượng say_name
, in ra tên của học sinh. Lưu ý rằng hàm say_name
không nhận bất kỳ đối số nào, nhưng nó có quyền truy cập vào họ và tên của sinh viên, vì chúng đã được xác định trước đó trong hàm tạo
Dưới đây là một số định nghĩa quan trọng liên quan đến các đối tượng
- Các lớp xác định cách các đối tượng hoạt động. Các lớp không chứa dữ liệu
- Các đối tượng là thể hiện của các lớp, chứa dữ liệu
- Các thành viên là các biến thuộc về một đối tượng
- Phương thức là các chức năng thuộc về một đối tượng và có quyền truy cập vào các thành viên của nó
- Constructor là một phương thức đặc biệt được thực thi khi một đối tượng được tạo
Di sản
Tính năng quan trọng nhất của lập trình hướng đối tượng là tính kế thừa. Tính năng này cho phép chúng tôi sử dụng lại mã mà chúng tôi đã viết và mở rộng nó. Ví dụ: giả sử chúng ta muốn có thể xác định một học sinh toán học, học sinh này cũng biết cách tính tổng hai số
class Student {
// constructor
public function __construct[$first_name, $last_name] {
$this->first_name = $first_name;
$this->last_name = $last_name;
}
public function say_name[] {
echo "My name is " . $this->first_name . " " . $this->last_name . ".\n";
}
}
$alex = new Student["Alex", "Jones"];
$alex->say_name[];
class MathStudent extends Student {
function sum_numbers[$first_number, $second_number] {
$sum = $first_number + $second_number;
echo $this->first_name . " says that " . $first_number . " + " . $second_number . " is " . $sum;
}
}
$eric = new MathStudent["Eric", "Chang"];
$eric->say_name[];
$eric->sum_numbers[3, 5];
Lưu ý rằng đối tượng của Eric cũng có hàm tạo tương tự và hàm say_name
, ngoài ra còn có một phương thức mới có tên là
class Student {
// constructor
public function __construct[$first_name, $last_name] {
$this->first_name = $first_name;
$this->last_name = $last_name;
}
public function say_name[] {
echo "My name is " . $this->first_name . " " . $this->last_name . ".\n";
}
}
$alex = new Student["Alex", "Jones"];
$alex->say_name[];
class MathStudent extends Student {
function sum_numbers[$first_number, $second_number] {
$sum = $first_number + $second_number;
echo $this->first_name . " says that " . $first_number . " + " . $second_number . " is " . $sum;
}
}
$eric = new MathStudent["Eric", "Chang"];
$eric->say_name[];
$eric->sum_numbers[3, 5];
1, khiến Eric phải tính tổng của hai số. Cũng lưu ý rằng chức năng mới có quyền truy cập vào cùng các thành viên mà chúng ta đã xác định trước đó trong lớp Sinh viên [class Student {
// constructor
public function __construct[$first_name, $last_name] {
$this->first_name = $first_name;
$this->last_name = $last_name;
}
public function say_name[] {
echo "My name is " . $this->first_name . " " . $this->last_name . ".\n";
}
}
$alex = new Student["Alex", "Jones"];
$alex->say_name[];
class MathStudent extends Student {
function sum_numbers[$first_number, $second_number] {
$sum = $first_number + $second_number;
echo $this->first_name . " says that " . $first_number . " + " . $second_number . " is " . $sum;
}
}
$eric = new MathStudent["Eric", "Chang"];
$eric->say_name[];
$eric->sum_numbers[3, 5];
2, class Student {
// constructor
public function __construct[$first_name, $last_name] {
$this->first_name = $first_name;
$this->last_name = $last_name;
}
public function say_name[] {
echo "My name is " . $this->first_name . " " . $this->last_name . ".\n";
}
}
$alex = new Student["Alex", "Jones"];
$alex->say_name[];
class MathStudent extends Student {
function sum_numbers[$first_number, $second_number] {
$sum = $first_number + $second_number;
echo $this->first_name . " says that " . $first_number . " + " . $second_number . " is " . $sum;
}
}
$eric = new MathStudent["Eric", "Chang"];
$eric->say_name[];
$eric->sum_numbers[3, 5];
3]Chức năng công cộng và tư nhân
Chúng ta có thể sử dụng các công cụ sửa đổi
class Student {
// constructor
public function __construct[$first_name, $last_name] {
$this->first_name = $first_name;
$this->last_name = $last_name;
}
public function say_name[] {
echo "My name is " . $this->first_name . " " . $this->last_name . ".\n";
}
}
$alex = new Student["Alex", "Jones"];
$alex->say_name[];
class MathStudent extends Student {
function sum_numbers[$first_number, $second_number] {
$sum = $first_number + $second_number;
echo $this->first_name . " says that " . $first_number . " + " . $second_number . " is " . $sum;
}
}
$eric = new MathStudent["Eric", "Chang"];
$eric->say_name[];
$eric->sum_numbers[3, 5];
4 và class Student {
// constructor
public function __construct[$first_name, $last_name] {
$this->first_name = $first_name;
$this->last_name = $last_name;
}
public function say_name[] {
echo "My name is " . $this->first_name . " " . $this->last_name . ".\n";
}
}
$alex = new Student["Alex", "Jones"];
$alex->say_name[];
class MathStudent extends Student {
function sum_numbers[$first_number, $second_number] {
$sum = $first_number + $second_number;
echo $this->first_name . " says that " . $first_number . " + " . $second_number . " is " . $sum;
}
}
$eric = new MathStudent["Eric", "Chang"];
$eric->say_name[];
$eric->sum_numbers[3, 5];
5 tương ứng để xác định các chức năng có thể được truy cập từ bên ngoài đối tượng hay không, cho mục đích đóng gói. Điều này cho phép xác định rõ hơn cách sử dụng các đối tượng, để phân tách giữa các chức năng được sử dụng cho nội bộ, trái ngược với giao diện bên ngoàiclass Student {
// constructor should be public
public function __construct[$first_name, $last_name] {
$this->first_name = $first_name;
$this->last_name = $last_name;
}
// for external use
public function say_name[] {
echo "My name is " . $this->full_name[] . "\n";
}
// for internal use
private function full_name[] {
return $this->first_name . " " . $this->last_name;
}
}
$alex = new Student["Alex", "Jones"];
$alex->say_name[];
// this will not work
// echo $alex->full_name[];
Bài tập
Tạo một lớp có tên là Xe hơi với một hàm tạo nhận thương hiệu và năm sản xuất của chiếc xe hơi, và một hàm có tên là
class Student {
// constructor
public function __construct[$first_name, $last_name] {
$this->first_name = $first_name;
$this->last_name = $last_name;
}
public function say_name[] {
echo "My name is " . $this->first_name . " " . $this->last_name . ".\n";
}
}
$alex = new Student["Alex", "Jones"];
$alex->say_name[];
class MathStudent extends Student {
function sum_numbers[$first_number, $second_number] {
$sum = $first_number + $second_number;
echo $this->first_name . " says that " . $first_number . " + " . $second_number . " is " . $sum;
}
}
$eric = new MathStudent["Eric", "Chang"];
$eric->say_name[];
$eric->sum_numbers[3, 5];
6 in ra các chi tiết của chiếc xe hơi