Bạn có thể ghi đè bất kỳ phương thức nào của lớp cha bằng cách tạo mã cần thiết từ mẫu được xác định trước. PhpStorm tạo một sơ khai chứa lời gọi đến phương thức của lớp cha, để lại cho nhà phát triển nhiệm vụ cung cấp một số mã nguồn có ý nghĩa trong phần thân của phương thức
Ghi đè một phương thức của một lớp cha
Trên menu Mã , nhấp vào Ghi đè phương pháp Ctrl . Ngoài ra, bạn có thể nhấp chuột phải vào bất kỳ đâu trong tệp lớp, sau đó nhấp vào Tạo Alt+Chèn và chọn Ghi đè . .
Chọn phương pháp để ghi đè [giữ Shift hoặc Ctrl key to perform a multiple select]. The list does not include the methods that are already overridden or cannot be accessed from the current subclass.
Nếu cần, hãy chọn hộp kiểm Sao chép PHPDoc để chèn nhận xét PHPDoc cho các phương thức bị ghi đè.
Nhấp vào OK và cung cấp mã nguồn cho nội dung phương thức.
Di chuột qua biểu tượng trong máng xối để xem tên của lớp cơ sở. bấm vào nó để.
Sửa đổi lần cuối. 21 tháng mười hai 2022
Triển khai các phương thức của một giao diện hoặc lớp trừu tượng Các đoạn mã bao quanh
Gọi một phương thức bị ghi đè [Cú pháp PHP 5]
class Item { private $name; function __construct[ $name="item", $code=0 ] { $this->name = $name; $this->code = $code; } function getName[] { return $this->name; } } class PriceItem extends Item { function getName[] { return "[price] ".parent::getName []; } } $item = new PriceItem ["widget", 5442]; print $item->getName[]; ?>
Ví dụ liên quan trong cùng thể loại
Trong ngữ cảnh của lập trình hướng đối tượng, ghi đè phương thức có nghĩa là thay thế phương thức cha trong lớp con. Khi ghi đè, chúng ta có thể khai báo lại phương thức của lớp cha trong lớp con. Vì vậy, về cơ bản, mục đích của việc ghi đè là thay đổi hành vi của phương thức lớp cha của bạn
Khi lớp của bạn có một số phương thức và một lớp khác [lớp dẫn xuất] muốn cùng một phương thức với hành vi khác thì sử dụng ghi đè, bạn hoàn toàn có thể thay đổi hành vi của lớp cơ sở [hoặc lớp cha]. Hai phương thức có cùng tên và cùng tham số được gọi là ghi đè
Ghi đè bối cảnh không quá khó trong PHP. Như chúng ta đã biết ghi đè trong PHP là một phương thức cập nhật phương thức kế thừa từ lớp cha sang lớp con. Vì vậy, trong trường hợp này, bạn sẽ yêu cầu phương thức có cùng tên trong lớp cha cũng như trong lớp con và sau đó chúng ta sẽ xem hành vi của phương thức lớp cha được thay đổi như thế nào khi lớp con ghi đè phương thức của lớp cha
Trong OOP PHP nếu chúng ta tạo một phương thức trong lớp con có cùng tên, cùng số lượng tham số và cùng một chỉ định truy cập như trong lớp cha thì chúng ta có thể nói rằng chúng ta đang thực hiện ghi đè phương thức. Ví dụ
class ParentClass {
public function test[$param] {
return "\n Parent - the parameter value is $param";
}
}
class ChildClass extends ParentClass {
public function test[$param] {
echo "\n Child - the parameter value is $param";
}
}
$objParentClass = new ParentClass;
$objChildClass = new ChildClass;
$objParentClass->test['class ParentClass'];
$objChildClass->test['class ChildClass'];
Định nghĩa về tính đa hình nói rằng “nếu quyết định gọi một phương thức được đưa ra bằng cách kiểm tra đối tượng trong thời gian chạy thì đó là trường hợp đa hình”. Chúng ta có thể áp dụng quy tắc này trong ví dụ của mình. Việc gọi phương thức test[] của lớp ParentClass hay lớp ChildClass được quyết định bằng cách kiểm tra đối tượng liên quan đang thực hiện cuộc gọi đến phương thức. Do đó, lời gọi phương thức sẽ dựa trên đối tượng
Đặc điểm là một điều tuyệt vời trong PHP. Bạn có thể sử dụng chúng để giảm trùng lặp mã bằng cách đặt các chức năng phổ biến trong một đặc điểm và áp dụng chúng cho tất cả các lớp cần các chức năng đó. Đôi khi tôi cũng sử dụng các đặc điểm để chia nhỏ một chức năng lớn thành nhiều đặc điểm sử dụng một lần
Trong bài đăng này, tôi muốn chỉ cho bạn cách bạn có thể ghi đè lên một chức năng đặc điểm và gọi nó từ chức năng ghi đè
Ghi đè một chức năng đặc điểm
Hãy tạo một đặc điểm đơn giản và sử dụng nó trong một lớp học
trait MyTrait
{
public function sayHi[]
{
echo 'trait says hi';
}
}
class MyClass
{
use MyTrait;
}
Thực thi [new MyClass]->sayHi[];
sẽ xuất ra "trait say hi"
Chức năng đặc điểm có thể được ghi đè đơn giản bằng cách xác định một chức năng có cùng tên trong lớp
class MyClass
{
use MyTrait;
public function sayHi[]
{
echo 'class says hi';
}
}
Bây giờ [new MyClass]->sayHi[];
sẽ xuất ra "lớp nói xin chào"
Gọi triển khai đặc điểm từ bên trong chức năng bị ghi đè
Bạn có thể không cần điều này mỗi ngày, nhưng đây là cách bạn có thể gọi triển khai
class ParentClass {
public function test[$param] {
return "\n Parent - the parameter value is $param";
}
}
class ChildClass extends ParentClass {
public function test[$param] {
echo "\n Child - the parameter value is $param";
}
}
$objParentClass = new ParentClass;
$objChildClass = new ChildClass;
$objParentClass->test['class ParentClass'];
$objChildClass->test['class ChildClass'];
1 từ đặc điểm bên trong hàm class ParentClass {
public function test[$param] {
return "\n Parent - the parameter value is $param";
}
}
class ChildClass extends ParentClass {
public function test[$param] {
echo "\n Child - the parameter value is $param";
}
}
$objParentClass = new ParentClass;
$objChildClass = new ChildClass;
$objParentClass->test['class ParentClass'];
$objChildClass->test['class ChildClass'];
1 từ lớpclass MyClass
{
use MyTrait {
sayHi as protected sayHiFromTrait;
}
public function sayHi[]
{
$this->sayHiFromTrait[];
echo ' and class says hi';
}
}
Bây giờ [new MyClass]->sayHi[];
sẽ xuất ra "đặc điểm nói xin chào và lớp nói xin chào"
Một ví dụ mà tôi cần cái này
Tôi hiện đang làm việc trên Media Library Pro. Gói này sẽ cung cấp, bên cạnh các thành phần Vue và React, một vài thành phần hỗ trợ Livewire giúp dễ dàng tải tệp lên thư viện phương tiện
Về cơ bản, nó sẽ sử dụng khả năng tải lên của Livewire. Để sử dụng các chức năng tải lên của Livewire, bạn cần áp dụng một đặc điểm có tên là
class ParentClass {
public function test[$param] {
return "\n Parent - the parameter value is $param";
}
}
class ChildClass extends ParentClass {
public function test[$param] {
echo "\n Child - the parameter value is $param";
}
}
$objParentClass = new ParentClass;
$objChildClass = new ChildClass;
$objParentClass->test['class ParentClass'];
$objChildClass->test['class ChildClass'];
4. Ngoài hộp, Livewire cũng xử lý lỗi tải lên. Điều này được thực hiện bên trong chức năng class MyClass
{
use MyTrait;
public function sayHi[]
{
echo 'class says hi';
}
}
0 của đặc điểmThành phần bộ sưu tập của media library pro có thể được sử dụng để quản lý các tệp bên trong bộ sưu tập thư viện phương tiện
Đây là cách thành phần bộ sưu tập trông như thế nào theo mặc định
Nếu bạn cố gắng thêm một tệp quá lớn vào bộ sưu tập, thông báo lỗi sẽ hiển thị ở trên cùng
Nếu bạn muốn thay thế một tệp trong bộ sưu tập, bạn có thể kéo tệp lên trên hàng. Nếu tệp không được chấp nhận, thông báo lỗi sẽ hiển thị trên hàng
Để đạt được điều này, thành phần này vẫn dựa vào triển khai
class MyClass
{
use MyTrait;
public function sayHi[]
{
echo 'class says hi';
}
}
0 bên trong đặc điểm class ParentClass {
public function test[$param] {
return "\n Parent - the parameter value is $param";
}
}
class ChildClass extends ParentClass {
public function test[$param] {
echo "\n Child - the parameter value is $param";
}
}
$objParentClass = new ParentClass;
$objChildClass = new ChildClass;
$objParentClass->test['class ParentClass'];
$objChildClass->test['class ChildClass'];
4 của Livewire. Việc triển khai sẽ thử một class MyClass
{
use MyTrait;
public function sayHi[]
{
echo 'class says hi';
}
}
3. Trong thành phần của chúng tôi, chúng tôi nắm bắt ngoại lệ đó và thực hiện logic cần thiết để hiển thị thông báo lỗi ở đúng nơi. Đây là mã có liên quan bên trong thành phần của chúng tôi________số 8Bớt tư tưởng
Tôi hy vọng bạn thích lời giải thích nhỏ này về cách bạn có thể gọi các phương thức đặc điểm bị ghi đè. Để ở trong vòng lặp của thư viện phương tiện chuyên nghiệp, hãy đăng ký vào danh sách gửi thư tại medialibrary. chuyên nghiệp