Chúng ta có thể tưởng tượng vũ trụ của chúng ta được tạo thành từ các vật thể khác nhau như mặt trời, trái đất, mặt trăng, v.v. thực hiện một phần mềm sử dụng các đối tượng khác nhau.
Trước khi chúng tôi đi vào chi tiết, hãy xác định các thuật ngữ quan trọng liên quan đến Lập trình hướng đối tượng.
Lớp - Đây là kiểu dữ liệu do lập trình viên xác định, bao gồm các hàm cục bộ cũng như dữ liệu cục bộ. Bạn có thể nghĩ về một lớp như một khuôn mẫu để tạo ra nhiều trường hợp cùng loại (hoặc lớp) của đối tượng.
Đối tượng - Một thể hiện riêng lẻ của cấu trúc dữ liệu được xác định bởi một lớp. Bạn định nghĩa một lớp một lần và sau đó tạo nhiều đối tượng thuộc về nó. Các đối tượng cũng được gọi là ví dụ.
Biến thành viên - Đây là các biến được định nghĩa trong một lớp. Dữ liệu này sẽ vô hình bên ngoài lớp và có thể được truy cập thông qua các hàm thành viên. Các biến này được gọi là thuộc tính của đối tượng một khi đối tượng được tạo.
>> Hàm thành viên - Đây là các hàm được định nghĩa bên trong một lớp và được sử dụng để truy cập dữ liệu đối tượng Học lập trình PHP <<
Kế thừa - Khi một lớp được định nghĩa bằng cách kế thừa chức năng hiện có của lớp cha thì nó được gọi là thừa kế. Ở đây lớp con sẽ kế thừa tất cả hoặc một vài hàm thành viên và các biến của lớp cha.
Lớp cha mẹ - Một lớp được kế thừa từ một lớp khác. Đây cũng được gọi là một lớp cơ sở hoặc siêu lớp.
Lớp con - Một lớp kế thừa từ lớp khác. Điều này cũng được gọi là một lớp con hoặc lớp dẫn xuất.
Đa hình - Đây là một khái niệm hướng đối tượng trong đó cùng một chức năng có thể được sử dụng cho các mục đích khác nhau. Ví dụ tên hàm sẽ vẫn giống nhau nhưng nó có số lượng đối số khác nhau và có thể thực hiện các nhiệm vụ khác nhau.
Quá tải - một loại đa hình trong đó một số hoặc tất cả các toán tử có các triển khai khác nhau tùy thuộc vào các loại đối số của chúng. Các chức năng tương tự cũng có thể bị quá tải với việc thực hiện khác nhau.
Trừu tượng dữ liệu - Bất kỳ biểu diễn dữ liệu nào trong đó các chi tiết triển khai đều bị ẩn (trừu tượng hóa).
Đóng gói - đề cập đến một khái niệm trong đó chúng ta gói gọn tất cả các dữ liệu và các hàm thành viên lại với nhau để tạo thành một đối tượng.
Trình xây dựng - dùng để chỉ một loại hàm đặc biệt sẽ được gọi tự động bất cứ khi nào có sự hình thành đối tượng từ một lớp.
Destructor - dùng để chỉ một loại chức năng đặc biệt sẽ được gọi tự động mỗi khi một đối tượng bị xóa hoặc đi ra khỏi phạm vi.
Biểu mẫu chung để định nghĩa một lớp mới trong PHP như sau
Một tập hợp các dấu ngoặc bao quanh bất kỳ số lượng khai báo biến và định nghĩa hàm.
Khai báo biến bắt đầu bằng var dạng đặc biệt , theo sau là tên biến $ thông thường; họ cũng có thể có một sự gán ban đầu cho một giá trị không đổi.
Các định nghĩa hàm trông giống như các hàm PHP độc lập nhưng là cục bộ của lớp và sẽ được sử dụng để thiết lập và truy cập dữ liệu đối tượng.
Dưới đây là một ví dụ xác định một loại loại Sách
Khi bạn đã xác định lớp của mình, thì bạn có thể tạo bao nhiêu đối tượng tùy thích của loại lớp đó. Sau đây là một ví dụ về cách tạo đối tượng bằng toán tử mới .
Ở đây chúng tôi đã tạo ra ba đối tượng và các đối tượng này độc lập với nhau và chúng sẽ có sự tồn tại riêng biệt. Tiếp theo chúng ta sẽ xem làm thế nào để truy cập chức năng thành viên và xử lý các biến thành viên.
Sau khi tạo các đối tượng của bạn, bạn sẽ có thể gọi các hàm thành viên liên quan đến đối tượng đó. Một hàm thành viên sẽ chỉ có thể xử lý biến thành viên của đối tượng liên quan.
Ví dụ sau đây cho thấy cách đặt tiêu đề và giá cho ba cuốn sách bằng cách gọi các chức năng thành viên.
PHP cung cấp một hàm đặc biệt gọi là __construct () để định nghĩa hàm tạo. Bạn có thể chuyển bao nhiêu đối số bạn muốn vào hàm constructor.
Ví dụ sau sẽ tạo một hàm tạo cho lớp Sách và nó sẽ khởi tạo giá và tiêu đề cho sách tại thời điểm tạo đối tượng.
Bây giờ chúng ta không cần gọi hàm set riêng để đặt giá và tiêu đề. Chúng ta chỉ có thể khởi tạo hai biến thành viên này tại thời điểm tạo đối tượng. Kiểm tra ví dụ sau đây
Di sản
Các định nghĩa lớp PHP có thể tùy ý kế thừa từ một định nghĩa lớp cha bằng cách sử dụng mệnh đề mở rộng. Cú pháp như sau
Tác dụng của thừa kế là lớp con (hoặc lớp con hoặc lớp dẫn xuất) có các đặc điểm sau
Tự động có tất cả các khai báo biến thành viên của lớp cha.
Tự động có tất cả các chức năng thành viên giống như cha mẹ, mà (theo mặc định) sẽ hoạt động giống như các chức năng đó làm trong cha mẹ.
Ví dụ sau kế thừa lớp Sách và thêm nhiều chức năng dựa trên yêu cầu.
Các định nghĩa hàm trong các lớp con ghi đè các định nghĩa có cùng tên trong các lớp cha. Trong một lớp con, chúng ta có thể sửa đổi định nghĩa của hàm được kế thừa từ lớp cha.
Trong ví dụ sau, các hàm getprice và getTitle được ghi đè để trả về một số giá trị.
Từ bên ngoài lớp học được khai báo
Từ trong lớp mà nó được khai báo
Từ bên trong một lớp khác thực hiện lớp mà nó được khai báo
Cho đến bây giờ chúng tôi đã thấy tất cả các thành viên là thành viên công cộng. Nếu bạn muốn giới hạn khả năng truy cập của các thành viên của một lớp thì bạn xác định các thành viên của lớp là riêng tư hoặc được bảo vệ .
Bằng cách chỉ định một thành viên riêng tư, bạn giới hạn khả năng truy cập của nó vào lớp mà nó được khai báo. Thành viên riêng không thể được tham chiếu từ các lớp kế thừa lớp mà nó được khai báo và không thể được truy cập từ bên ngoài lớp.
Một thành viên lớp có thể được đặt ở chế độ riêng tư bằng cách sử dụng từ khóa riêng trước mặt thành viên.
Một thuộc tính hoặc phương thức được bảo vệ có thể truy cập được trong lớp mà nó được khai báo, cũng như trong các lớp mở rộng lớp đó. Các thành viên được bảo vệ không có sẵn ngoài hai loại lớp học đó. Một thành viên lớp có thể được bảo vệ bằng cách sử dụng từ khóa được bảo vệ trước thành viên.
Đây là phiên bản khác nhau của MyClass
Kể từ PHP5, có thể định nghĩa một giao diện, như thế này
Khai báo một hằng số là dễ dàng, như được thực hiện trong phiên bản MyClass này
Một lớp trừu tượng là một lớp không thể khởi tạo, chỉ được kế thừa. Bạn khai báo một lớp trừu tượng với từ khóa trừu tượng , như thế này
Khi kế thừa từ một lớp trừu tượng, tất cả các phương thức được đánh dấu trừu tượng trong khai báo lớp của cha mẹ phải được định nghĩa bởi đứa trẻ; Ngoài ra, các phương pháp này phải được xác định với cùng tầm nhìn.
Khai báo các thành viên của lớp hoặc các phương thức là tĩnh làm cho chúng có thể truy cập được mà không cần khởi tạo lớp. Một thành viên được khai báo là tĩnh không thể được truy cập bằng một đối tượng lớp khởi tạo (mặc dù một phương thức tĩnh có thể).
Ví dụ sau đây dẫn đến lỗi nghiêm trọng: Không thể ghi đè phương thức cuối cùng BaseClass :: moreTesting ()
Khái niệm hướng đối tượng
Trước khi chúng tôi đi vào chi tiết, hãy xác định các thuật ngữ quan trọng liên quan đến Lập trình hướng đối tượng.
Lớp - Đây là kiểu dữ liệu do lập trình viên xác định, bao gồm các hàm cục bộ cũng như dữ liệu cục bộ. Bạn có thể nghĩ về một lớp như một khuôn mẫu để tạo ra nhiều trường hợp cùng loại (hoặc lớp) của đối tượng.
![]() |
| Học lập trình PHP chuyên nghiệp |
Đối tượng - Một thể hiện riêng lẻ của cấu trúc dữ liệu được xác định bởi một lớp. Bạn định nghĩa một lớp một lần và sau đó tạo nhiều đối tượng thuộc về nó. Các đối tượng cũng được gọi là ví dụ.
Biến thành viên - Đây là các biến được định nghĩa trong một lớp. Dữ liệu này sẽ vô hình bên ngoài lớp và có thể được truy cập thông qua các hàm thành viên. Các biến này được gọi là thuộc tính của đối tượng một khi đối tượng được tạo.
>> Hàm thành viên - Đây là các hàm được định nghĩa bên trong một lớp và được sử dụng để truy cập dữ liệu đối tượng Học lập trình PHP <<
Kế thừa - Khi một lớp được định nghĩa bằng cách kế thừa chức năng hiện có của lớp cha thì nó được gọi là thừa kế. Ở đây lớp con sẽ kế thừa tất cả hoặc một vài hàm thành viên và các biến của lớp cha.
Lớp cha mẹ - Một lớp được kế thừa từ một lớp khác. Đây cũng được gọi là một lớp cơ sở hoặc siêu lớp.
Lớp con - Một lớp kế thừa từ lớp khác. Điều này cũng được gọi là một lớp con hoặc lớp dẫn xuất.
Đa hình - Đây là một khái niệm hướng đối tượng trong đó cùng một chức năng có thể được sử dụng cho các mục đích khác nhau. Ví dụ tên hàm sẽ vẫn giống nhau nhưng nó có số lượng đối số khác nhau và có thể thực hiện các nhiệm vụ khác nhau.
Quá tải - một loại đa hình trong đó một số hoặc tất cả các toán tử có các triển khai khác nhau tùy thuộc vào các loại đối số của chúng. Các chức năng tương tự cũng có thể bị quá tải với việc thực hiện khác nhau.
Trừu tượng dữ liệu - Bất kỳ biểu diễn dữ liệu nào trong đó các chi tiết triển khai đều bị ẩn (trừu tượng hóa).
Đóng gói - đề cập đến một khái niệm trong đó chúng ta gói gọn tất cả các dữ liệu và các hàm thành viên lại với nhau để tạo thành một đối tượng.
Trình xây dựng - dùng để chỉ một loại hàm đặc biệt sẽ được gọi tự động bất cứ khi nào có sự hình thành đối tượng từ một lớp.
Destructor - dùng để chỉ một loại chức năng đặc biệt sẽ được gọi tự động mỗi khi một đối tượng bị xóa hoặc đi ra khỏi phạm vi.
Xác định các lớp PHP
Biểu mẫu chung để định nghĩa một lớp mới trong PHP như sau
<?php class phpClass { var $var1; var $var2 = "constant string"; function myfunc ($arg1, $arg2) { [..] } [..] } ?>
Dưới đây là mô tả của từng dòng
Các hình thức đặc biệt lớp , theo sau là tên của lớp mà bạn muốn xác định.Một tập hợp các dấu ngoặc bao quanh bất kỳ số lượng khai báo biến và định nghĩa hàm.
Khai báo biến bắt đầu bằng var dạng đặc biệt , theo sau là tên biến $ thông thường; họ cũng có thể có một sự gán ban đầu cho một giá trị không đổi.
Các định nghĩa hàm trông giống như các hàm PHP độc lập nhưng là cục bộ của lớp và sẽ được sử dụng để thiết lập và truy cập dữ liệu đối tượng.
Dưới đây là một ví dụ xác định một loại loại Sách
<?php class Books { /* Member variables */ var $price; var $title; /* Member functions */ function setPrice($par){ $this->price = $par; } function getPrice(){ echo $this->price ."<br/>"; } function setTitle($par){ $this->title = $par; } function getTitle(){ echo $this->title ." <br/>"; } } ?>Biến $ này là một biến đặc biệt và nó đề cập đến cùng một đối tượng tức là. chinh no.
Tạo các đối tượng trong PHP
Khi bạn đã xác định lớp của mình, thì bạn có thể tạo bao nhiêu đối tượng tùy thích của loại lớp đó. Sau đây là một ví dụ về cách tạo đối tượng bằng toán tử mới .
$physics = new Books;
$maths = new Books;
$chemistry = new Books;
Ở đây chúng tôi đã tạo ra ba đối tượng và các đối tượng này độc lập với nhau và chúng sẽ có sự tồn tại riêng biệt. Tiếp theo chúng ta sẽ xem làm thế nào để truy cập chức năng thành viên và xử lý các biến thành viên.
Chức năng gọi thành viên
Sau khi tạo các đối tượng của bạn, bạn sẽ có thể gọi các hàm thành viên liên quan đến đối tượng đó. Một hàm thành viên sẽ chỉ có thể xử lý biến thành viên của đối tượng liên quan.
Ví dụ sau đây cho thấy cách đặt tiêu đề và giá cho ba cuốn sách bằng cách gọi các chức năng thành viên.
Physics for High School
Advanced Chemistry
Algebra
10
15
7
Hàm xây dựng
Hàm xây dựng là loại hàm đặc biệt được gọi tự động mỗi khi đối tượng được tạo. Vì vậy, chúng tôi tận dụng tối đa hành vi này, bằng cách khởi tạo nhiều thứ thông qua các hàm xây dựng.PHP cung cấp một hàm đặc biệt gọi là __construct () để định nghĩa hàm tạo. Bạn có thể chuyển bao nhiêu đối số bạn muốn vào hàm constructor.
Ví dụ sau sẽ tạo một hàm tạo cho lớp Sách và nó sẽ khởi tạo giá và tiêu đề cho sách tại thời điểm tạo đối tượng.
function __construct( $par1, $par2 ) {
$this->title = $par1;
$this->price = $par2;
}
Bây giờ chúng ta không cần gọi hàm set riêng để đặt giá và tiêu đề. Chúng ta chỉ có thể khởi tạo hai biến thành viên này tại thời điểm tạo đối tượng. Kiểm tra ví dụ sau đây
Physics for High School
Advanced Chemistry
Algebra
10
15
7
Phá hủy
Giống như hàm xây dựng, bạn có thể định nghĩa hàm hủy bằng hàm __desturation () . Bạn có thể giải phóng tất cả các tài nguyên có trong một hàm hủy.Di sản
Các định nghĩa lớp PHP có thể tùy ý kế thừa từ một định nghĩa lớp cha bằng cách sử dụng mệnh đề mở rộng. Cú pháp như sau
class Child extends Parent {
<definition body>
}
Tác dụng của thừa kế là lớp con (hoặc lớp con hoặc lớp dẫn xuất) có các đặc điểm sau
Tự động có tất cả các khai báo biến thành viên của lớp cha.
Tự động có tất cả các chức năng thành viên giống như cha mẹ, mà (theo mặc định) sẽ hoạt động giống như các chức năng đó làm trong cha mẹ.
Ví dụ sau kế thừa lớp Sách và thêm nhiều chức năng dựa trên yêu cầu.
class Novel extends Books { var $publisher; function setPublisher($par){ $this->publisher = $par; } function getPublisher(){ echo $this->publisher. "<br />"; } }Bây giờ ngoài các hàm được kế thừa, lớp Novel giữ hai hàm thành viên bổ sung.
Chức năng ghi đè
Các định nghĩa hàm trong các lớp con ghi đè các định nghĩa có cùng tên trong các lớp cha. Trong một lớp con, chúng ta có thể sửa đổi định nghĩa của hàm được kế thừa từ lớp cha.
Trong ví dụ sau, các hàm getprice và getTitle được ghi đè để trả về một số giá trị.
function getPrice() { echo $this->price . "<br/>"; return $this->price; } function getTitle(){ echo $this->title . "<br/>"; return $this->title; }
Thành viên
Trừ khi bạn chỉ định khác, các thuộc tính và phương thức của một lớp là công khai. Điều đó có nghĩa là, họ có thể được truy cập trong ba tình huống có thểTừ bên ngoài lớp học được khai báo
Từ trong lớp mà nó được khai báo
Từ bên trong một lớp khác thực hiện lớp mà nó được khai báo
Cho đến bây giờ chúng tôi đã thấy tất cả các thành viên là thành viên công cộng. Nếu bạn muốn giới hạn khả năng truy cập của các thành viên của một lớp thì bạn xác định các thành viên của lớp là riêng tư hoặc được bảo vệ .
Thành viên tư nhân
Bằng cách chỉ định một thành viên riêng tư, bạn giới hạn khả năng truy cập của nó vào lớp mà nó được khai báo. Thành viên riêng không thể được tham chiếu từ các lớp kế thừa lớp mà nó được khai báo và không thể được truy cập từ bên ngoài lớp.
Một thành viên lớp có thể được đặt ở chế độ riêng tư bằng cách sử dụng từ khóa riêng trước mặt thành viên.
class MyClass { private $car = "skoda"; $driver = "SRK"; function __construct($par) { // Statements here run every time // an instance of the class // is created. } function myPublicFunction() { return("I'm visible!"); } private function myPrivateFunction() { return("I'm not visible outside!"); } }Khi lớp MyClass được kế thừa bởi một lớp khác bằng cách sử dụng extends, myPublicFunction () sẽ hiển thị, cũng như trình điều khiển $. Lớp mở rộng sẽ không có bất kỳ nhận thức nào về việc truy cập vào myPrivateFunction và $ car, vì chúng được khai báo là riêng tư.
Thành viên được bảo vệ
Một thuộc tính hoặc phương thức được bảo vệ có thể truy cập được trong lớp mà nó được khai báo, cũng như trong các lớp mở rộng lớp đó. Các thành viên được bảo vệ không có sẵn ngoài hai loại lớp học đó. Một thành viên lớp có thể được bảo vệ bằng cách sử dụng từ khóa được bảo vệ trước thành viên.
Đây là phiên bản khác nhau của MyClass
class MyClass { protected $car = "skoda"; $driver = "SRK"; function __construct($par) { // Statements here run every time // an instance of the class // is created. } function myPublicFunction() { return("I'm visible!"); } protected function myPrivateFunction() { return("I'm visible in child class!"); } }
Giao diện
Các giao diện được định nghĩa để cung cấp một tên hàm phổ biến cho người thực hiện. Người thực hiện khác nhau có thể thực hiện các giao diện theo yêu cầu của họ. Bạn có thể nói, giao diện là bộ xương được thực hiện bởi các nhà phát triển.Kể từ PHP5, có thể định nghĩa một giao diện, như thế này
interface Mail { public function sendMail(); }Sau đó, nếu một lớp khác thực hiện giao diện đó, như thế này
class Report implements Mail { // sendMail() Definition goes here }
Hằng số
Một hằng số có phần giống như một biến, trong đó nó giữ một giá trị, nhưng thực sự giống một hàm hơn vì một hằng số là bất biến. Một khi bạn khai báo một hằng, nó không thay đổi.Khai báo một hằng số là dễ dàng, như được thực hiện trong phiên bản MyClass này
class MyClass { const requiredMargin = 1.7; function __construct($incomingValue) { // Statements here run every time // an instance of the class // is created. } }Trong lớp này, requiredMargin là một hằng số. Nó được khai báo với từ khóa const và trong mọi trường hợp không thể thay đổi nó thành bất kỳ thứ gì ngoài 1.7. Lưu ý rằng tên của hằng không có $ hàng đầu, như tên biến.
Lớp học trừu tượng
Một lớp trừu tượng là một lớp không thể khởi tạo, chỉ được kế thừa. Bạn khai báo một lớp trừu tượng với từ khóa trừu tượng , như thế này
Khi kế thừa từ một lớp trừu tượng, tất cả các phương thức được đánh dấu trừu tượng trong khai báo lớp của cha mẹ phải được định nghĩa bởi đứa trẻ; Ngoài ra, các phương pháp này phải được xác định với cùng tầm nhìn.
abstract class MyAbstractClass { abstract function myAbstractFunction() { } }Lưu ý rằng các định nghĩa hàm bên trong một lớp trừu tượng cũng phải được bắt đầu bằng tóm tắt từ khóa. Việc định nghĩa hàm trừu tượng bên trong một lớp không trừu tượng là không hợp pháp.
Từ khóa tĩnh
Khai báo các thành viên của lớp hoặc các phương thức là tĩnh làm cho chúng có thể truy cập được mà không cần khởi tạo lớp. Một thành viên được khai báo là tĩnh không thể được truy cập bằng một đối tượng lớp khởi tạo (mặc dù một phương thức tĩnh có thể).
<?php class Foo { public static $my_static = 'foo'; public function staticValue() { return self::$my_static; } } print Foo::$my_static . "\n"; $foo = new Foo(); print $foo->staticValue() . "\n"; ?>
Từ khóa cuối cùng
PHP 5 giới thiệu từ khóa cuối cùng, ngăn các lớp con ghi đè một phương thức bằng cách thêm tiền tố vào định nghĩa cuối cùng. Nếu bản thân lớp đang được định nghĩa cuối cùng thì nó không thể được mở rộng.Ví dụ sau đây dẫn đến lỗi nghiêm trọng: Không thể ghi đè phương thức cuối cùng BaseClass :: moreTesting ()
<?php class BaseClass { public function test() { echo "BaseClass::test() called<br>"; } final public function moreTesting() { echo "BaseClass::moreTesting() called<br>"; } } class ChildClass extends BaseClass { public function moreTesting() { echo "ChildClass::moreTesting() called<br>"; } } ?>
Gọi các nhà xây dựng cha mẹ
Thay vì viết một hàm tạo hoàn toàn mới cho lớp con, hãy viết nó bằng cách gọi hàm tạo của cha mẹ một cách rõ ràng và sau đó làm bất cứ điều gì cần thiết ngoài việc khởi tạo lớp con. Đây là một ví dụ đơn giảnclass Name { var $_firstName; var $_lastName; function Name($first_name, $last_name) { $this->_firstName = $first_name; $this->_lastName = $last_name; } function toString() { return($this->_lastName .", " .$this->_firstName); } } class NameSub1 extends Name { var $_middleInitial; function NameSub1($first_name, $middle_initial, $last_name) { Name::Name($first_name, $last_name); $this->_middleInitial = $middle_initial; } function toString() { return(Name::toString() . " " . $this->_middleInitial); } }Trong ví dụ này, chúng ta có một lớp cha (Tên), có hàm tạo hai đối số và lớp con (NameSub1), có hàm tạo ba đối số.
Hàm tạo của các hàm NameSub1 bằng cách gọi rõ ràng hàm tạo của nó bằng cách sử dụng cú pháp :: (chuyển hai đối số của nó theo) và sau đó đặt một trường bổ sung. Tương tự, NameSub1 định nghĩa hàm toString () không phải hàm tạo của nó theo hàm của hàm cha mà nó ghi đè.
LƯU Ý - Một hàm tạo có thể được định nghĩa với cùng tên với tên của một lớp. Nó được định nghĩa trong ví dụ trên.
LƯU Ý - Một hàm tạo có thể được định nghĩa với cùng tên với tên của một lớp. Nó được định nghĩa trong ví dụ trên.

Không có nhận xét nào:
Đăng nhận xét