Kế thừa phiên bản php

PHP là ngôn ngữ kịch bản máy chủ và là công cụ mạnh mẽ để tạo các trang Web động và tương tác

PHP là một giải pháp thay thế được sử dụng rộng rãi, miễn phí và hiệu quả cho các đối thủ cạnh tranh như ASP của Microsoft

Bắt đầu học PHP ngay bây giờ »

Học dễ dàng với "PHP Tryit"

Với trình chỉnh sửa "PHP Tryit" trực tuyến của chúng tôi, bạn có thể chỉnh sửa mã PHP và nhấp vào nút để xem kết quả

Thí dụ



echo "Tập lệnh PHP đầu tiên của tôi. ";
?>


Tự mình thử »

Nhấp vào nút "Tự dùng thử" để xem nó hoạt động như thế nào


Bài tập PHP

Kiểm tra bản thân với các bài tập

Tập thể dục

Chèn phần còn thiếu của mã bên dưới để xuất "Xin chào thế giới"


Cung cấp câu trả lời "



Ví dụ PHP

Tìm hiểu bằng các ví dụ. Hướng dẫn này bổ sung tất cả các giải thích với các ví dụ rõ ràng

Xem tất cả các ví dụ về PHP


Bài kiểm tra PHP

Học bằng cách làm bài kiểm tra. Bài kiểm tra này sẽ cung cấp cho bạn tín hiệu về mức độ bạn biết hoặc không biết về PHP

Bắt đầu bài kiểm tra PHP


Việc học của tôi

Theo dõi tiến trình của bạn với chương trình "Học tập của tôi" miễn phí tại W3Schools

Đăng nhập vào tài khoản của bạn và bắt đầu kiếm điểm

Đây là một tính năng tùy chọn. Bạn có thể học W3Schools mà không cần sử dụng My Learning

Kế thừa phiên bản php


Tài liệu tham khảo PHP

Tài liệu tham khảo PHP của W3Schools chứa các danh mục khác nhau của tất cả các hàm, từ khóa và hằng số PHP, cùng với các ví dụ

Các đặc điểm là một cơ chế để tái sử dụng mã trong các ngôn ngữ kế thừa đơn lẻ như PHP. Một Đặc điểm nhằm giảm bớt một số hạn chế của thừa kế đơn lẻ bằng cách cho phép nhà phát triển sử dụng lại các bộ phương thức một cách tự do trong một số lớp độc lập sống trong các hệ thống phân cấp lớp khác nhau. Ngữ nghĩa của sự kết hợp giữa Đặc điểm và lớp được xác định theo cách làm giảm độ phức tạp và tránh các vấn đề điển hình liên quan đến đa kế thừa và Mixins

Một Đặc điểm tương tự như một lớp, nhưng chỉ nhằm mục đích nhóm các chức năng theo cách chi tiết và nhất quán. Không thể tự khởi tạo một Đặc điểm. Nó là một bổ sung cho sự kế thừa truyền thống và cho phép cấu thành hành vi theo chiều ngang;

Ví dụ #1 Ví dụ về đặc điểm

trait ezcReflectionReturnInfo {
    function getReturnType() { /*1*/ }
    function getReturnDescription() { /*2*/ }
}

class ezcReflectionMethod extends ReflectionMethod {
    use ezcReflectionReturnInfo;
    /* ... */
}

class ezcReflectionFunction extends ReflectionFunction {
    use ezcReflectionReturnInfo;
    /* ... */
}
?>

Quyền ưu tiên

Thành viên kế thừa từ lớp cơ sở bị ghi đè bởi thành viên được chèn bởi Trait. Thứ tự ưu tiên là các thành viên từ các phương thức Trait của lớp hiện tại sẽ ghi đè lên các phương thức kế thừa

Ví dụ #2 Ví dụ về thứ tự ưu tiên

Phương thức kế thừa từ lớp cơ sở bị ghi đè bởi phương thức được chèn vào MyHelloWorld từ SayWorld Trait. Hành vi này giống với các phương thức được định nghĩa trong lớp MyHelloWorld. Thứ tự ưu tiên là các phương thức từ lớp hiện tại ghi đè lên các phương thức Trait, từ đó ghi đè lên các phương thức từ lớp cơ sở

class Base {
    public function sayHello() {
        echo 'Hello ';
    }
}

trait SayWorld {
    public function sayHello() {
        parent::sayHello();
        echo 'World!';
    }
}

class MyHelloWorld extends Base {
    use SayWorld;
}

$o = new MyHelloWorld();
$o->sayHello();
?>

Ví dụ trên sẽ xuất ra

Ví dụ #3 Ví dụ về thứ tự ưu tiên thay thế

trait HelloWorld {
    public function sayHello() {
        echo 'Hello World!';
    }
}

________số 8

$o = new TheWorldIsNotEnough();
$o->sayHello();
?>

Ví dụ trên sẽ xuất ra

Nhiều đặc điểm

Nhiều Đặc điểm có thể được chèn vào một lớp bằng cách liệt kê chúng trong câu lệnh class ezcReflectionMethod extends ReflectionMethod {
    use ezcReflectionReturnInfo;
    /* ... */
}
0, được phân tách bằng dấu phẩy

Ví dụ #4 Sử dụng nhiều đặc điểm

class ezcReflectionMethod extends ReflectionMethod {
    use ezcReflectionReturnInfo;
    /* ... */
}
1

class ezcReflectionMethod extends ReflectionMethod {
    use ezcReflectionReturnInfo;
    /* ... */
}
2

class ezcReflectionMethod extends ReflectionMethod {
    use ezcReflectionReturnInfo;
    /* ... */
}
3

class ezcReflectionMethod extends ReflectionMethod {
    use ezcReflectionReturnInfo;
    /* ... */
}
4

Ví dụ trên sẽ xuất ra

Giải quyết xung đột

Nếu hai Đặc điểm chèn một phương thức có cùng tên, thì sẽ xảy ra lỗi nghiêm trọng nếu xung đột không được giải quyết rõ ràng

Để giải quyết xung đột đặt tên giữa các Đặc điểm được sử dụng trong cùng một lớp, toán tử class ezcReflectionMethod extends ReflectionMethod {
    use ezcReflectionReturnInfo;
    /* ... */
}
5 cần được sử dụng để chọn chính xác một trong các phương thức xung đột

Vì điều này chỉ cho phép một phương thức loại trừ, toán tử class ezcReflectionMethod extends ReflectionMethod {
    use ezcReflectionReturnInfo;
    /* ... */
}
6 có thể được sử dụng để thêm bí danh cho một trong các phương thức. Lưu ý toán tử class ezcReflectionMethod extends ReflectionMethod {
    use ezcReflectionReturnInfo;
    /* ... */
}
6 không đổi tên phương thức và nó cũng không ảnh hưởng đến bất kỳ phương thức nào khác

Ví dụ #5 Giải quyết xung đột

Trong ví dụ này, Talker sử dụng các đặc điểm A và B. Vì A và B có các phương thức xung đột nên nó xác định sử dụng biến thể của smallTalk từ đặc điểm B và biến thể của bigTalk từ đặc điểm A

Aliased_Talker sử dụng toán tử class ezcReflectionMethod extends ReflectionMethod {
    use ezcReflectionReturnInfo;
    /* ... */
}
6 để có thể sử dụng triển khai bigTalk của B dưới một bí danh bổ sung class ezcReflectionMethod extends ReflectionMethod {
    use ezcReflectionReturnInfo;
    /* ... */
}
9

class ezcReflectionFunction extends ReflectionFunction {
    use ezcReflectionReturnInfo;
    /* ... */
}
?>
0

class ezcReflectionFunction extends ReflectionFunction {
    use ezcReflectionReturnInfo;
    /* ... */
}
?>
1

class ezcReflectionFunction extends ReflectionFunction {
    use ezcReflectionReturnInfo;
    /* ... */
}
?>
2

class ezcReflectionFunction extends ReflectionFunction {
    use ezcReflectionReturnInfo;
    /* ... */
}
?>
3

Thay đổi phương thức hiển thị

Sử dụng cú pháp class ezcReflectionMethod extends ReflectionMethod {
    use ezcReflectionReturnInfo;
    /* ... */
}
6, người ta cũng có thể điều chỉnh mức độ hiển thị của phương thức trong lớp trưng bày

Ví dụ #6 Thay đổi phương thức hiển thị

trait HelloWorld {
    public function sayHello() {
        echo 'Hello World!';
    }
}

class ezcReflectionFunction extends ReflectionFunction {
    use ezcReflectionReturnInfo;
    /* ... */
}
?>
6

class ezcReflectionFunction extends ReflectionFunction {
    use ezcReflectionReturnInfo;
    /* ... */
}
?>
7

Đặc điểm tổng hợp từ đặc điểm

Giống như các lớp có thể sử dụng các đặc điểm, các đặc điểm khác cũng vậy. Bằng cách sử dụng một hoặc nhiều đặc điểm trong một định nghĩa đặc điểm, nó có thể bao gồm một phần hoặc toàn bộ các thành viên được xác định trong các đặc điểm khác đó

Ví dụ #7 Các đặc điểm được tổng hợp từ các đặc điểm

class ezcReflectionMethod extends ReflectionMethod {
    use ezcReflectionReturnInfo;
    /* ... */
}
1

class ezcReflectionFunction extends ReflectionFunction {
    use ezcReflectionReturnInfo;
    /* ... */
}
?>
9

class Base {
    public function sayHello() {
        echo 'Hello ';
    }
}
0

class Base {
    public function sayHello() {
        echo 'Hello ';
    }
}
1

class Base {
    public function sayHello() {
        echo 'Hello ';
    }
}
2

Ví dụ trên sẽ xuất ra

Thành viên đặc điểm trừu tượng

Các đặc điểm hỗ trợ việc sử dụng các phương thức trừu tượng để áp đặt các yêu cầu đối với lớp trưng bày. Các phương thức công khai, được bảo vệ và riêng tư được hỗ trợ. Trước PHP 8. 0. 0, chỉ các phương thức trừu tượng công khai và được bảo vệ mới được hỗ trợ

thận trọng

Một lớp cụ thể đáp ứng yêu cầu này bằng cách định nghĩa một phương thức cụ thể có cùng tên;

Ví dụ #8 Thể hiện Yêu cầu bằng Phương thức Trừu tượng

class Base {
    public function sayHello() {
        echo 'Hello ';
    }
}
3

class Base {
    public function sayHello() {
        echo 'Hello ';
    }
}
4

Thành viên đặc điểm tĩnh

Các đặc điểm có thể xác định các biến tĩnh, phương thức tĩnh và thuộc tính tĩnh

Ghi chú

Kể từ PHP 8. 1. 0, việc gọi một phương thức tĩnh hoặc truy cập trực tiếp vào một thuộc tính tĩnh trên một đặc điểm không được dùng nữa. Các phương thức và thuộc tính tĩnh chỉ nên được truy cập trên một lớp bằng cách sử dụng đặc điểm

Ví dụ #9 Biến tĩnh

class Base {
    public function sayHello() {
        echo 'Hello ';
    }
}
5

class Base {
    public function sayHello() {
        echo 'Hello ';
    }
}
6

class Base {
    public function sayHello() {
        echo 'Hello ';
    }
}
7

class Base {
    public function sayHello() {
        echo 'Hello ';
    }
}
8

Ví dụ #10 Phương thức tĩnh

class Base {
    public function sayHello() {
        echo 'Hello ';
    }
}
9

trait SayWorld {
    public function sayHello() {
        parent::sayHello();
        echo 'World!';
    }
}
0

trait SayWorld {
    public function sayHello() {
        parent::sayHello();
        echo 'World!';
    }
}
1

Ví dụ #11 Thuộc tính tĩnh

trait SayWorld {
    public function sayHello() {
        parent::sayHello();
        echo 'World!';
    }
}
2

trait SayWorld {
    public function sayHello() {
        parent::sayHello();
        echo 'World!';
    }
}
0

trait SayWorld {
    public function sayHello() {
        parent::sayHello();
        echo 'World!';
    }
}
4

Đặc tính

Các đặc điểm cũng có thể xác định các thuộc tính

Ví dụ #12 Xác định thuộc tính

trait SayWorld {
    public function sayHello() {
        parent::sayHello();
        echo 'World!';
    }
}
5

trait SayWorld {
    public function sayHello() {
        parent::sayHello();
        echo 'World!';
    }
}
6

trait SayWorld {
    public function sayHello() {
        parent::sayHello();
        echo 'World!';
    }
}
7

Nếu một đặc điểm xác định một thuộc tính thì một lớp không thể định nghĩa một thuộc tính có cùng tên trừ khi nó tương thích (cùng khả năng hiển thị và loại, công cụ sửa đổi chỉ đọc và giá trị ban đầu), nếu không sẽ xảy ra lỗi nghiêm trọng

Ví dụ #13 Giải quyết xung đột

trait SayWorld {
    public function sayHello() {
        parent::sayHello();
        echo 'World!';
    }
}
8

trait SayWorld {
    public function sayHello() {
        parent::sayHello();
        echo 'World!';
    }
}
9

hằng số

Các đặc điểm có thể, kể từ PHP 8. 2. 0, cũng xác định hằng số

Ví dụ #14 Xác định hằng số

class MyHelloWorld extends Base {
    use SayWorld;
}
0

class MyHelloWorld extends Base {
    use SayWorld;
}
1

class MyHelloWorld extends Base {
    use SayWorld;
}
2

Nếu một đặc điểm xác định một hằng số thì một lớp không thể định nghĩa một hằng số có cùng tên trừ khi nó tương thích (cùng khả năng hiển thị, giá trị ban đầu và tính hữu hạn), nếu không sẽ xảy ra lỗi nghiêm trọng