Hàm gọi php trong hàm tĩnh

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

<?php Class BaseClass { // Static functions public static function getStaticText() { return 'Called from BaseClass'; } public static function getStaticResult() { // we can alternatively use BaseClass::getStaticText(); return self::getStaticText(); } } Class DerivedClass extends BaseClass { public static function getStaticText() { return 'Called from DerivedClass'; } } var_dump(DerivedClass::getStaticResult()); ?>

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
<?php class Example { public static function greetings() { echo "Hello from PHP!"; } public function __construct() { self::greetings(); } } new Example(); ?>

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ệ

Phương thức tĩnh được gọi như thế nào trong PHP?

Để thêm phương thức tĩnh vào lớp, từ khóa tĩnh được sử dụng. Chúng có thể được gọi trực tiếp bên ngoài lớp bằng cách sử dụng toán tử phân giải phạm vi (. ) như sau. Lớp học của tôi. kiểm tra();

Chúng ta có thể sử dụng điều này trong phương thức tĩnh PHP không?

Bởi vì các phương thức tĩnh có thể gọi được mà không cần tạo phiên bản của đối tượng, nên biến giả $this không khả dụng bên trong các phương thức được khai báo là tĩnh . Gọi các phương thức không tĩnh sẽ gây ra lỗi tĩnh. Trước PHP 8. 0.

Tôi có thể gọi một phương thức tĩnh bên trong một phương thức thông thường không?

Giải pháp 1. Một phương thức tĩnh KHÔNG cung cấp tham chiếu đến một thể hiện của lớp của nó (nó là một phương thức lớp), do đó, không, bạn không thể gọi một phương thức không tĩnh bên trong một phương thức tĩnh.

Chúng ta có thể gọi phương thức tĩnh bên trong không

Một phương thức tĩnh chỉ có thể gọi các phương thức tĩnh khác; . it cannot call a non-static method.

Chủ đề