PHP hướng object với Class và Object

Related Articles

Trong bài viết này, tất cả chúng ta sẽ tìm hiểu và khám phá những điều cơ bản về lập trình hướng object trong PHP. Chúng ta sẽ khởi đầu với phần trình làng về những class và object và tất cả chúng ta sẽ tranh luận về một số ít khái niệm nâng cao như tính thừa kế và tính đa hình trong nửa sau của bài viết này .

Lập trình hướng đối tượng (OOP) là gì?

Lập trình hướng đối tượng, thường được gọi là OOP, một cách tiếp cận giúp bạn phát triển các ứng dụng phức tạp theo cách dễ dàng duy trì và có thể mở rộng trong thời gian dài. Trong thế giới của OOP, các thực thể trong thế giới thực như Person, Car hoặc Animal được coi là object (đối tượng). Trong lập trình hướng đối tượng, bạn tương tác với ứng dụng của mình bằng cách sử dụng các object. Điều này trái ngược với lập trình thủ tục (procedural), nơi bạn chủ yếu tương tác với các hàm và biến toàn cục.

Trong OOP, có khái niệm về “class“, được sử dụng để mô hình hóa hoặc ánh xạ một thực thể trong thế giới thực sang một template dữ liệu (properties – các thuộc tính) và chức năng (methods – các phương thức). Một “object” là giá trị của một class và bạn có thể tạo nhiều giá trị của cùng một class. Ví dụ: có một class đơn lẻ Person, nhưng nhiều object person có thể là các giá trị của class này – dan, zainab, hector, v.v

Class định nghĩa các thuộc tính – property. Ví dụ: đối với class Person, chúng ta có thể có name, agephoneNumber. Sau đó, mỗi object person sẽ có giá trị riêng cho các thuộc tính đó.

Bạn cũng có thể định nghĩa các phương thức trong class cho phép bạn thao tác các giá trị của các thuộc tính object và thực hiện các thao tác trên các object. Ví dụ, bạn có thể định nghĩa một phương thức save để lưu thông tin object vào cơ sở dữ liệu.

Class trong PHP là gì?

Một class là một khuôn mẫu đại diện thay mặt cho một thực thể trong quốc tế thực và nó định nghĩa những thuộc tính và phương pháp của thực thể. Trong phần này, chúng tôi sẽ bàn luận về khung cơ bản một class PHP nổi bật .

Cách tốt nhất để hiểu các khái niệm mới là qua ví dụ. Vì vậy, hãy xem class Employee trong snippet sau, đại diện cho thực thể employee.

Câu lệnh class Employee trong dòng đầu tiên định nghĩa class Employee. Sau đó, chúng ta tiếp tục khai báo các thuộc tính, hàm constructor và các phương thức class khác.

Thuộc tính class trong PHP

Bạn có thể nghĩ các thuộc tính của class là các biến được sử dụng để chứa thông tin về object. Trong ví dụ trên, chúng tôi đã xác định ba thuộc tính của – first_name, last_nameage. Trong đa số các trường hợp, các thuộc tính của class được truy xuất thông qua các object được khởi tạo.

Các thuộc tính này là private, có nghĩa là chúng chỉ có thể được truy xuất từ bên trong class. Đây là mức truy xuất an toàn nhất cho các thuộc tính. Chúng tôi sẽ thảo luận về các cấp truy xuất khác nhau cho các thuộc tính và phương thức của class sau trong bài viết này.

Constructor cho các class PHP

Hàm constructor là một phương pháp class đặc biệt quan trọng tự động hóa được gọi khi bạn khởi tạo một object. Chúng ta sẽ xem xét cách khởi tạo những object trong vài phần tiếp theo, nhưng giờ đây bạn chỉ cần biết rằng một hàm constructor được sử dụng để khởi tạo những thuộc tính object khi object được tạo ra .

Bạn có thể xác định hàm constructor bằng cách định nghĩa phương thức __construct.

Các phương thức cho các class PHP

Chúng ta hoàn toàn có thể nghĩ về những phương pháp của class là những hàm triển khai những hành vi đơn cử được link với những object. Trong hầu hết những trường hợp, chúng được sử dụng để truy xuất và thao tác những thuộc tính object và thực thi những hoạt động giải trí tương quan .

Trong ví dụ trên, chúng tôi đã xác định phương thức getLastName, nó trả về last name được liên kết với object.

Vì vậy, một giới thiệu ngắn gọn về cấu trúc class trong PHP. Trong phần tiếp theo, chúng tôi sẽ xem cách khởi tạo các object của class Employee.

Một object trong PHP là gì?

Trong phần trước, tất cả chúng ta đã đàm đạo về cấu trúc cơ bản của một class trong PHP. Bây giờ, khi bạn muốn sử dụng một class, bạn cần khởi tạo nó và hiệu quả ở đầu cuối là một object. Vì vậy, tất cả chúng ta hoàn toàn có thể nghĩ về một class như một bản thiết kế và một object là một thứ thực tiễn mà bạn hoàn toàn có thể thao tác với .

Trong ngữ cảnh của class Employee mà chúng ta vừa tạo trong phần trước, hãy xem cách khởi tạo một object của class đó.

Bạn cần sử dụng từ khóa new khi bạn muốn khởi tạo một object của bất kỳ class nào cùng với tên class của nó và bạn sẽ nhận lại một giá trị object mới của class đó.

Nếu một class đã định nghĩa phương thức __construct và nó yêu cầu các đối số, bạn cần truyền các đối số đó khi bạn khởi tạo một object. Trong trường hợp của chúng tôi, hàm constructor của class Employee yêu cầu ba đối số và do đó chúng tôi đã vượt qua những đối số này khi chúng tôi tạo object $objEmployee. Như chúng ta đã thảo luận trước đó, phương thức __construct được gọi tự động khi object được khởi tạo.

Tiếp theo, chúng tôi đã gọi các phương thức class trên object $objEmployee để in thông tin được khởi tạo trong quá trình tạo object. Tất nhiên, bạn có thể tạo nhiều object của cùng một class, như được hiển thị trong đoạn code sau.

Hình ảnh sau đây là màn biểu diễn hình ảnh của class Employee và 1 số ít trường hợp của nó .

Object InstantiationObject InstantiationNói một cách đơn thuần, một class là một bản thiết kế mà bạn hoàn toàn có thể sử dụng để tạo những object có cấu trúc .

Encapsulation (tính đóng gói)

Trong phần trước, chúng ta đã thảo luận về cách khởi tạo các object của class Employee. Thật thú vị khi lưu ý rằng chính object $objEmployee kết hợp các thuộc tính và phương thức của class. Nói cách khác, object này ẩn đi những chi tiết đó từ phần còn lại của chương trình. Trong thế giới OOP, điều này được gọi là encapsulation (đóng gói dữ liệu).

Đóng gói là một góc nhìn quan trọng của OOP được cho phép bạn hạn chế quyền truy xuất vào những thuộc tính hoặc phương pháp nhất định của object. Và điều đó đưa tất cả chúng ta đến một chủ đề khác để bàn luận : access level – mức độ truy xuất .

Access Levels (mức độ truy xuất)

Khi bạn định nghĩa một thuộc tính hoặc một phương thức trong một class, bạn có thể khai báo nó có một trong ba cấp truy xuất này, public, private hoặc protected.

Public Access

Khi bạn khai báo một thuộc tính hoặc một phương pháp là public, nó hoàn toàn có thể được truy xuất từ bất kể đâu bên ngoài class. Giá trị của một thuộc tính public hoàn toàn có thể được sửa đổi từ bất kể nơi nào trong code của bạn .

Hãy xem xét một ví dụ để hiểu mức độ truy xuất public .

Như bạn có thể thấy trong ví dụ trên, chúng tôi đã khai báo thuộc tính name là public. Do đó, bạn có thể đặt nó từ bất kỳ đâu ngoài class, như đã thực hiện ở đây.

Private Access

Khi bạn khai báo một thuộc tính hoặc một phương thức là private, nó chỉ có thể được truy xuất từ bên trong class. Điều này có nghĩa là bạn cần xác định các phương thức getter và setter để lấy và xét giá trị của thuộc tính đó.

Một lần nữa, hãy xem lại ví dụ trước để hiểu mức độ truy xuất riêng .

Nếu bạn thử truy xuất một tài sản private bên ngoài class, nó sẽ gây ra lỗi nghiêm trọng Cannot access private property Person::$name. Vì vậy, bạn cần xét giá trị của thuộc tính private bằng phương thức setter, như chúng ta đã sử dụng phương thức setName.

Có nhiều nguyên do lý giải bạn hoàn toàn có thể muốn làm cho một gia tài private. Ví dụ, có lẽ rằng nên triển khai một số ít hành vi ( update cơ sở tài liệu, giả sử hoặc hiển thị lại một template ) nếu thuộc tính đó biến hóa. Trong trường hợp đó, bạn hoàn toàn có thể định nghĩa một phương pháp setter và giải quyết và xử lý bất kể logic đặc biệt quan trọng nào khi thuộc tính được đổi khác .

Protected Access

Cuối cùng, khi bạn khai báo một thuộc tính hoặc một phương thức là protected, nó có thể được truy xuất bởi cùng một class đã định nghĩa nó và các class kế thừa class. Chúng ta sẽ thảo luận về kế thừa trong phần tiếp theo, vì vậy chúng ta sẽ quay lại cấp độ truy xuất protected sau đó.

Inheritance – kế thừa

Inheritance là một khía cạnh quan trọng của mô hình lập trình hướng đối tượng, cho phép bạn kế thừa các thuộc tính và phương thức của các class khác bằng cách mở rộng chúng. Lớp được kế thừa được gọi là parent class và class kế thừa class khác được gọi là child class. Khi bạn khởi tạo một object của child class, nó cũng thừa hưởng các thuộc tính và phương thức của parent class.

Chúng ta hãy nhìn vào ảnh chụp màn hình hiển thị sau đây để hiểu khái niệm inheritance

InheritanceInheritanceTrong ví dụ trên, class Person là parent class và class Employee lan rộng ra hoặc thừa kế class Person và do đó được gọi là child class .

Chúng ta hãy thử xem xét một ví dụ trong thực tiễn để hiểu phương pháp hoạt động giải trí của nó .

Điều quan trọng cần lưu ý ở đây là class Employee đã sử dụng từ khóa extends để kế thừa class Person. Bây giờ, class Employee có thể truy xuất tất cả các thuộc tính và phương thức của class Person được khai báo là public hoặc protected. (Nó không thể truy xuất các thành viên được khai báo là private).

Trong ví dụ trên, object $employee có thể truy xuất các phương thức getNamesetName được định nghĩa trong class Person khi được khai báo là public.

Tiếp theo, chúng tôi đã truy xuất phương thức callToProtectedNameAndAge bằng phương thức getNameAndAge được xác định trong class Employee, vì nó được khai báo là protected. Cuối cùng, object $employee không thể truy xuất phương thức callToPrivateNameAndAge của class Person vì nó được khai báo là private.

Mặt khác, bạn có thể sử dụng object $employee để đặt thuộc tính age của class Person, như chúng ta đã làm trong phương thức setAge được định nghĩa trong class Employee, vì thuộc tính age được khai báo là được bảo vệ.

Vì vậy, đó là một trình làng ngắn gọn về thừa kế. Nó giúp bạn giảm trùng lặp code, và do đó khuyến khích năng lực sử dụng lại code .

Polymorphism

Polymorphism là một khái niệm quan trọng khác trong quốc tế lập trình hướng đối tượng người tiêu dùng, đề cập đến năng lực giải quyết và xử lý những object khác nhau dựa trên những loại tài liệu của chúng .

Ví dụ, trong tình hướng thừa kế, nếu child class muốn đổi khác hành vi của phương pháp của parent class, nó hoàn toàn có thể override phương pháp đó. Đây được gọi là phương pháp override. Hãy nhanh gọn xem qua một ví dụ trong thực tiễn để hiểu khái niệm về phương pháp override .

Như bạn có thể thấy, chúng tôi đã thay đổi hành vi của phương thức formatMessage bằng cách override nó trong class BoldMessage. Điều quan trọng là một thông điệp được định dạng khác nhau dựa trên loại object, cho dù đó là một giá trị của parent class hay child class.

(Một số ngôn ngữ hướng đối tượng cũng có một kiểu overload phương thức cho phép bạn định nghĩa nhiều phương thức của class có cùng tên nhưng số lượng đối số khác nhau. Điều này không được hỗ trợ trực tiếp trong PHP, nhưng có một số cách giải quyết để đạt được chức năng tương tự).

Tổng kết

Lập trình hướng đối tượng người tiêu dùng là một chủ đề lớn và tất cả chúng ta chỉ ra mặt nổi của sự phức tạp của nó. Tôi kỳ vọng rằng hướng dẫn này đã giúp bạn khởi đầu với những điều cơ bản của OOP và thôi thúc bạn liên tục và tìm hiểu và khám phá những chủ đề OOP nâng cao hơn .

Lập trình hướng đối hướng là một góc nhìn quan trọng trong tăng trưởng ứng dụng, bất kể bạn đang thao tác với công nghệ tiên tiến nào. Hôm nay, trong ngữ cảnh của PHP, tất cả chúng ta đã luận bàn một vài khái niệm cơ bản về OOP và cũng nhân thời cơ này để ra mắt vài ví dụ trong thực tiễn .

Hãy gửi câu hỏi của bạn trải qua feed bên dưới

More on this topic

Comments

LEAVE A REPLY

Please enter your comment!
Please enter your name here

Advertismentspot_img

Popular stories