Trong blog này, chúng ta sẽ tìm hiểu cách chúng ta có thể gọi các hàm tĩnh bị ghi đè từ lớp cơ sở Nếu hàm đó bị ghi đè bởi lớp dẫn xuất
Hãy hiểu nó với một ví dụ về mã vấn đề và giải pháp –
Vấn đề là gì?
Giả sử bạn tạo hai phương thức tĩnh trong một lớp BaseClass.
Bạn đã gọi phương thức tĩnh đầu tiên getStaticText() từ phương thức tĩnh thứ hai getStaticResult().
Bây giờ một lớp con DerivedClass mở rộng BaseClass và ghi đè phương thức tĩnh getStaticText()
Xem đoạn mã dưới đây để hiểu đúng về nó -
Bắt đầu Thương mại điện tử không đầu
ngay bây giờ. Đọc thêm
Bây giờ nếu bạn gọi getStaticResult() từ DerivedClass –
thì kết quả của var_dump(DerivedClass. getStaticResult()) sẽ là
"Được gọi từ BaseClass"
Hàm getStaticText() được gọi từ BaseClass vì nó được gọi với từ khóa self
Trường hợp
Bạn đã ghi đè phương thức getStaticText() trong DerivedClass
Ngoài ra, bạn đã gọi phương thức từ DerivedClass – var_dump(DerivedClass. getStaticResult());
Ở đây Giả sử bạn muốn, nếu bất kỳ phương thức nào bị ghi đè trong lớp con thì nó phải được gọi từ lớp con. Nếu gọi lớp là lớp con (DerivedClass)
Trong đoạn mã trên, tôi muốn getStaticText() phải được gọi từ DerivedClass
- Bạn có thể nói gọi DerivedClass. getStaticText(); . lấy Văn bản tĩnh(); . Nhưng làm thế nào ai đó biết trong khi tạo Lớp cơ sở mà lớp nào sẽ mở rộng Lớp cơ sở
Sau đó, làm thế nào để đạt được điều này nói chung?
Giải pháp 🙂
Đây là lời gọi của phương thức tĩnh với từ khóa tĩnh
Nếu bạn sử dụng từ khóa tĩnh để gọi các hàm tĩnh trong lớp thì –
- Trong trường hợp không có hàm bị ghi đè thì nó sẽ gọi hàm trong lớp như từ khóa self
- Nếu hàm bị ghi đè thì từ khóa tĩnh sẽ gọi hàm bị ghi đè trong lớp dẫn xuất
Trong đoạn mã dưới đây, chúng tôi đã sử dụng tĩnh. getStaticText() thay cho self. lấy Văn bản tĩnh () trong phương thức getStaticResult () của Lớp cơ sở
<?php Class BaseClass { // Static functions public static function getStaticText() { return 'Called from BaseClass'; } public static function getStaticResult() { // we can alternatively use BaseClass::getStaticText(); return static::getStaticText(); } } Class DerivedClass extends BaseClass { public static function getStaticText() { return 'Called from DerivedClass'; } } var_dump(DerivedClass::getStaticResult()); ?>Bây giờ, kết quả của var_dump(DerivedClass. getStaticResult()) sẽ là
“Được gọi từ DerivedClass“
Vì vậy, hàm getStaticText() bị ghi đè được gọi lần này. Đây là cách gọi hàm tĩnh với hàm tĩnh hoạt động. Để biết thêm cách sử dụng tĩnh, hãy truy cập Từ khóa tĩnh
Hy vọng bạn đã hiểu khái niệm và cách sử dụng phương thức tĩnh cho các phương thức tĩnh được ghi đè và nó sẽ giúp bạn phần nào trong quá trình phát triển
Trong hướng dẫn này, chúng ta sẽ tìm hiểu thêm về các phương thức tĩnh trong PHP OOP. Chúng ta sẽ thảo luận về ý nghĩa của các phương thức tĩnh, khi nào sử dụng chúng, cú pháp và sự khác biệt giữa các phương thức tĩnh và không tĩnh
Các phương thức tĩnh trong PHP là gì?
- Các phương thức tĩnh được tạo bằng từ khóa tĩnh
- Các phương thức tĩnh của một lớp được gọi trực tiếp. Điều đó có nghĩa là chúng ta không cần tạo thể hiện của lớp để gọi phương thức tĩnh của nó
- Một lớp có thể chứa cả phương thức tĩnh và không tĩnh
- Để gọi phương thức tĩnh của một lớp, chúng ta sử dụng toán tử phân giải phạm vi
Cú pháp của phương thức tĩnh trong PHP
<?php class ClassName { public static function method() { echo "Hello from PHP!"; } } ?>Cú pháp gọi phương thức tĩnh
ClassName::staticMethod();Thí dụ
<?php class Example { public static function greetings() { echo "Hello from PHP!"; } } // Calling static method Example::greetings(); ?>- Trong ví dụ trên, chúng ta tạo một lớp có chứa phương thức tĩnh trong đó
- Chúng tôi gọi phương thức tĩnh của lớp này bên ngoài bằng cách sử dụng phương thức phân giải phạm vi
Gọi phương thức tĩnh bên trong lớp – PHP
- Trong PHP, từ khóa self cho phép gọi phương thức tĩnh của chính nó bên trong lớp. Hãy xem ví dụ sau, trong đó chúng ta tạo một lớp với phương thức tĩnh và gọi nó bên trong hàm tạo của lớp
- bản thân. methodName() là cú pháp chung để gọi phương thức tĩnh bên trong lớp
Gọi phương thức tĩnh bên trong một lớp khác – PHP
Rất thú vị khi sử dụng trường hợp của các phương thức tĩnh, chúng ta có thể gọi một phương thức tĩnh công khai bên trong một lớp khác. Hãy nhớ rằng, nó phải là một phương thức tĩnh công khai
<?php class Example{ public static function greetings() { echo "Hello from PHP!"; } } class Example2{ public function msg() { Example::greetings(); } } ?>Gọi một phương thức tĩnh trong lớp con – PHP
Trong trường hợp thừa kế, chúng ta có thể gọi phương thức tĩnh của lớp cha bên trong lớp con bằng cách sử dụng từ khóa cha. Nhìn vào ví dụ dưới đây
<?php class Example { protected static function getMessage() { return "Message from static method"; } } class Child1 extends domain { public $name; public function __construct() { $this->name= parent::getMessage(); } } $child1= new child1(); echo $child1-> name; ?>- Trong ví dụ trên, chúng ta tạo một lớp cha với một số phương thức tĩnh
- Chúng tôi tạo một lớp khác mở rộng lớp cha
- Gọi phương thức tĩnh của lớp cha bằng từ khóa cha theo sau là tên của phương thức tĩnh
Ghi chú. Như chúng ta đã đề cập trong phần trước, việc gọi một phương thức tĩnh bên trong một lớp khác yêu cầu nó phải công khai. Nhưng trong trường hợp gọi phương thức tĩnh của lớp cha (kế thừa), công cụ sửa đổi truy cập phương thức tĩnh có thể là công khai hoặc được bảo vệ