Một lớp là một mẫu cho các đối tượng và một đối tượng là một thể hiện của lớp.
Trường hợp OOP
Giả sử chúng ta có một lớp học tên là trái cây. Một loại trái cây có thể có các thuộc tính như tên, màu sắc, trọng lượng, v.v. Chúng ta có thể xác định các biến như $ name, $ color và $ trọng lượng để giữ các giá trị của các thuộc tính này.
Khi các đối tượng riêng lẻ [táo, chuối, v.v.] được tạo, chúng kế thừa tất cả các thuộc tính và hành vi từ lớp, nhưng mỗi đối tượng sẽ có các giá trị khác nhau cho các thuộc tính.
Xác định một lớp
Một lớp được xác định bằng cách sử dụng từ khóa class
, theo sau là tên của lớp và một cặp niềng răng xoăn [{}]. Tất cả các thuộc tính và phương pháp của nó đi vào bên trong niềng răng:
Cú pháp
Dưới đây chúng tôi khai báo một lớp có tên trái cây bao gồm hai thuộc tính [$ name và $ color] và hai phương thức set_name [] và get_name [] để cài đặt và nhận thuộc tính $ name:
function set_name[$name] {
$this->name = $name;
}
function get_name[] {
return $this->name;
}
}
?>
Lưu ý: Trong một lớp, các biến được gọi là thuộc tính và hàm được gọi là phương thức! In a class, variables are called properties and functions are called methods!
Xác định các đối tượng
Các lớp học không có gì nếu không có đối tượng! Chúng ta có thể tạo nhiều đối tượng từ một lớp. Mỗi đối tượng có tất cả các thuộc tính và phương thức được xác định trong lớp, nhưng chúng sẽ có các giá trị thuộc tính khác nhau.
Đối tượng của một lớp được tạo bằng từ khóa
$this is defined [A] Fatal error: Uncaught Error: Non-static method A::foo[] cannot be called statically in %s :27 Stack trace: #0 {main} thrown in %s on line 270.
Trong ví dụ dưới đây, $ Apple và $ Banana là những trường hợp của loại trái cây:
Thí dụ
function set_name[$name] {
$this->name = $name;
}
function get_name[] {
return $this->name;
}
}
Lưu ý: Trong một lớp, các biến được gọi là thuộc tính và hàm được gọi là phương thức!
$banana = new Fruit[];
$apple->set_name['Apple'];
$banana->set_name['Banana'];
Xác định các đối tượng
echo "
";
echo $banana->get_name[];
?>
Các lớp học không có gì nếu không có đối tượng! Chúng ta có thể tạo nhiều đối tượng từ một lớp. Mỗi đối tượng có tất cả các thuộc tính và phương thức được xác định trong lớp, nhưng chúng sẽ có các giá trị thuộc tính khác nhau.
Đối tượng của một lớp được tạo bằng từ khóa
$this is defined [A] Fatal error: Uncaught Error: Non-static method A::foo[] cannot be called statically in %s :27 Stack trace: #0 {main} thrown in %s on line 270.
Thí dụ
function set_name[$name] {
$this->name = $name;
}
function
get_name[] {
return $this->name;
}
function set_color[$color] {
$this->color = $color;
}
function get_color[] {
return $this->color;
}
}
Lưu ý: Trong một lớp, các biến được gọi là thuộc tính và hàm được gọi là phương thức!
$apple->set_name['Apple'];
$apple->set_color['Red'];
echo "Name: " . $apple->get_name[];
echo "
";
echo "Color: " . $apple->get_color[];
?>
Các lớp học không có gì nếu không có đối tượng! Chúng ta có thể tạo nhiều đối tượng từ một lớp. Mỗi đối tượng có tất cả các thuộc tính và phương thức được xác định trong lớp, nhưng chúng sẽ có các giá trị thuộc tính khác nhau.
Đối tượng của một lớp được tạo bằng từ khóa $this is defined [A]
Fatal error: Uncaught Error: Non-static method A::foo[] cannot be called statically in %s :27
Stack trace:
#0 {main}
thrown in %s on line 27
0.
Trong ví dụ dưới đây, $ Apple và $ Banana là những trường hợp của loại trái cây:
Thí dụ
Thí dụ
Dưới đây chúng tôi khai báo một lớp có tên trái cây bao gồm hai thuộc tính [$ name và $ color] và hai phương thức set_name [] và get_name [] để cài đặt và nhận thuộc tính $ name:
1. Inside the class [by adding a set_name[] method and use $this]:
Thí dụ
& nbsp; // Phương pháp & nbsp; hàm set_name [$ name] {& nbsp; & nbsp; & nbsp; $ this-> name = $ name; & nbsp; } & nbsp; hàm get_name [] {& nbsp; & nbsp; & nbsp; trả về $ this-> tên; & nbsp; }}
class Fruit {
public $name;
function set_name[$name] {
$this->name = $name;
}
}
$apple = new Fruit[];
$apple->set_name["Apple"];
$ apple = new Fruit []; $ chuối = fruit new []; $ apple-> set_name ['apple']; $ chuối-> set_name ['chuối'];
?>
Các lớp học không có gì nếu không có đối tượng! Chúng ta có thể tạo nhiều đối tượng từ một lớp. Mỗi đối tượng có tất cả các thuộc tính và phương thức được xác định trong lớp, nhưng chúng sẽ có các giá trị thuộc tính khác nhau.
Đối tượng của một lớp được tạo bằng từ khóa
$this is defined [A] Fatal error: Uncaught Error: Non-static method A::foo[] cannot be called statically in %s :27 Stack trace: #0 {main} thrown in %s on line 270.
Thí dụ
& nbsp; // Phương pháp & nbsp; hàm set_name [$ name] {& nbsp; & nbsp; & nbsp; $ this-> name = $ name; & nbsp; } & nbsp; hàm get_name [] {& nbsp; & nbsp; & nbsp; trả về $ this-> tên; & nbsp; }}
class Fruit {
public $name;
}
$apple = new Fruit[];
$apple->name = "Apple";
$ apple = new Fruit []; $ chuối = fruit new []; $ apple-> set_name ['apple']; $ chuối-> set_name ['chuối'];
?>
Các lớp học không có gì nếu không có đối tượng! Chúng ta có thể tạo nhiều đối tượng từ một lớp. Mỗi đối tượng có tất cả các thuộc tính và phương thức được xác định trong lớp, nhưng chúng sẽ có các giá trị thuộc tính khác nhau.
Đối tượng của một lớp được tạo bằng từ khóa $this is defined [A]
Fatal error: Uncaught Error: Non-static method A::foo[] cannot be called statically in %s :27
Stack trace:
#0 {main}
thrown in %s on line 27
0.
Trong ví dụ dưới đây, $ Apple và $ Banana là những trường hợp của loại trái cây:
Thí dụ
Các lớp học không có gì nếu không có đối tượng! Chúng ta có thể tạo nhiều đối tượng từ một lớp. Mỗi đối tượng có tất cả các thuộc tính và phương thức được xác định trong lớp, nhưng chúng sẽ có các giá trị thuộc tính khác nhau.
class
Các định nghĩa lớp cơ bản bắt đầu bằng từ khóa class
, theo sau là tên lớp, theo sau là một cặp niềng răng xoăn bao quanh các định nghĩa của các thuộc tính và phương thức thuộc lớp.
Tên lớp có thể là bất kỳ nhãn hợp lệ nào, miễn là nó không phải là từ dành riêng của PHP. Một tên lớp hợp lệ bắt đầu bằng một chữ cái hoặc dấu gạch dưới, theo sau là bất kỳ số lượng chữ cái, số hoặc nhấn mạnh. Như một biểu hiện chính quy, nó sẽ được thể hiện như vậy:
$this is defined [A] Fatal error: Uncaught Error: Non-static method A::foo[] cannot be called statically in %s :27 Stack trace: #0 {main} thrown in %s on line 273.
Một lớp có thể chứa các hằng số, biến của chính nó [được gọi là "thuộc tính"] và các hàm [được gọi là "Phương thức"].
Ví dụ #1 Định nghĩa lớp đơn giản
$this is defined [A] Fatal error: Uncaught Error: Non-static method A::foo[] cannot be called statically in %s :27 Stack trace: #0 {main} thrown in %s on line 274
$ Biến giả $ này có sẵn khi một phương thức được gọi từ trong bối cảnh đối tượng. $ Đây là giá trị của đối tượng gọi.
Cảnh báo
Gọi một phương thức phi tĩnh là ném một lỗi. Trước Php 8.0.0, điều này sẽ tạo ra thông báo không nhận được và $ Điều này sẽ không được xác định.Error. Prior to PHP 8.0.0, this would generate a deprecation notice, and $this would be undefined.
Ví dụ #2 Một số ví dụ về $ này là giả biến
$this is defined [A] Fatal error: Uncaught Error: Non-static method A::foo[] cannot be called statically in %s :27 Stack trace: #0 {main} thrown in %s on line 275
class
$this is defined [A] Fatal error: Uncaught Error: Non-static method A::foo[] cannot be called statically in %s :27 Stack trace: #0 {main} thrown in %s on line 277
Đầu ra của ví dụ trên trong Php 7:
$this is defined [A] Deprecated: Non-static method A::foo[] should not be called statically in %s on line 27 $this is not defined. Deprecated: Non-static method A::foo[] should not be called statically in %s on line 20 $this is not defined. Deprecated: Non-static method B::bar[] should not be called statically in %s on line 32 Deprecated: Non-static method A::foo[] should not be called statically in %s on line 20 $this is not defined.
Đầu ra của ví dụ trên trong Php 8:
$this is defined [A] Fatal error: Uncaught Error: Non-static method A::foo[] cannot be called statically in %s :27 Stack trace: #0 {main} thrown in %s on line 27
new
Để tạo một thể hiện của một lớp, từ khóa
$this is defined [A] Fatal error: Uncaught Error: Non-static method A::foo[] cannot be called statically in %s :27 Stack trace: #0 {main} thrown in %s on line 270 phải được sử dụng. Một đối tượng sẽ luôn được tạo trừ khi đối tượng có một hàm tạo được xác định để ném một ngoại lệ về lỗi. Các lớp nên được xác định trước khi khởi tạo [và trong một số trường hợp, đây là một yêu cầu].
Nếu một chuỗi chứa tên của một lớp được sử dụng với
$this is defined [A] Fatal error: Uncaught Error: Non-static method A::foo[] cannot be called statically in %s :27 Stack trace: #0 {main} thrown in %s on line 270, một thể hiện mới của lớp đó sẽ được tạo. Nếu lớp nằm trong không gian tên, tên đủ điều kiện của nó phải được sử dụng khi làm điều này.string containing the name of a class is used with
$this is defined [A] Fatal error: Uncaught Error: Non-static method A::foo[] cannot be called statically in %s :27 Stack trace: #0 {main} thrown in %s on line 270, a new instance of that class will be created. If the class is in a namespace, its fully qualified name must be used when doing this.
Ghi chú::
Nếu không có đối số nào được chuyển cho hàm tạo của lớp, ngoặc đơn sau khi tên lớp có thể bị bỏ qua.
Ví dụ #3 Tạo một thể hiện
object[ClassA]#1 [0] { } object[ClassB]#1 [0] { } object[ClassC]#1 [0] { } object[ClassD]#1 [0] { }0
Kể từ Php 8.0.0, sử dụng
$this is defined [A] Fatal error: Uncaught Error: Non-static method A::foo[] cannot be called statically in %s :27 Stack trace: #0 {main} thrown in %s on line 270 với các biểu thức tùy ý được hỗ trợ. Điều này cho phép khởi tạo phức tạp hơn nếu biểu thức tạo ra một chuỗi. Các biểu thức phải được bọc trong ngoặc đơn.string. The expressions must be wrapped in parentheses.
Ví dụ #4 Tạo một thể hiện bằng cách sử dụng biểu thức tùy ý
Trong ví dụ đã cho, chúng tôi hiển thị nhiều ví dụ về các biểu thức tùy ý hợp lệ tạo ra một tên lớp. Điều này cho thấy một cuộc gọi đến một hàm, nối chuỗi và hằng số ____22.object[ClassA]#1 [0] {
}
object[ClassB]#1 [0] {
}
object[ClassC]#1 [0] {
}
object[ClassD]#1 [0] {
}
2 constant.
object[ClassA]#1 [0] { } object[ClassB]#1 [0] { } object[ClassC]#1 [0] { } object[ClassD]#1 [0] { }3
object[ClassA]#1 [0] { } object[ClassB]#1 [0] { } object[ClassC]#1 [0] { } object[ClassD]#1 [0] { }4
object[ClassA]#1 [0] { } object[ClassB]#1 [0] { } object[ClassC]#1 [0] { } object[ClassD]#1 [0] { }5
Đầu ra của ví dụ trên trong Php 8:
object[ClassA]#1 [0] { } object[ClassB]#1 [0] { } object[ClassC]#1 [0] { } object[ClassD]#1 [0] { }
Để tạo một thể hiện của một lớp, từ khóa
$this is defined [A] Fatal error: Uncaught Error: Non-static method A::foo[] cannot be called statically in %s :27 Stack trace: #0 {main} thrown in %s on line 270 phải được sử dụng. Một đối tượng sẽ luôn được tạo trừ khi đối tượng có một hàm tạo được xác định để ném một ngoại lệ về lỗi. Các lớp nên được xác định trước khi khởi tạo [và trong một số trường hợp, đây là một yêu cầu].
Nếu một chuỗi chứa tên của một lớp được sử dụng với
$this is defined [A] Fatal error: Uncaught Error: Non-static method A::foo[] cannot be called statically in %s :27 Stack trace: #0 {main} thrown in %s on line 270, một thể hiện mới của lớp đó sẽ được tạo. Nếu lớp nằm trong không gian tên, tên đủ điều kiện của nó phải được sử dụng khi làm điều này.
Ghi chú:
object[ClassA]#1 [0] { } object[ClassB]#1 [0] { } object[ClassC]#1 [0] { } object[ClassD]#1 [0] { }8
object[ClassA]#1 [0] { } object[ClassB]#1 [0] { } object[ClassC]#1 [0] { } object[ClassD]#1 [0] { }9
NULL NULL object[SimpleClass]#1 [1] { ["var"]=> string[30] "$assigned will have this value" }0
Nếu không có đối số nào được chuyển cho hàm tạo của lớp, ngoặc đơn sau khi tên lớp có thể bị bỏ qua.
NULL NULL object[SimpleClass]#1 [1] { ["var"]=> string[30] "$assigned will have this value" }
Ví dụ #3 Tạo một thể hiện
Kể từ Php 8.0.0, sử dụng $this is defined [A]
Fatal error: Uncaught Error: Non-static method A::foo[] cannot be called statically in %s :27
Stack trace:
#0 {main}
thrown in %s on line 27
0 với các biểu thức tùy ý được hỗ trợ. Điều này cho phép khởi tạo phức tạp hơn nếu biểu thức tạo ra một chuỗi. Các biểu thức phải được bọc trong ngoặc đơn.
NULL NULL object[SimpleClass]#1 [1] { ["var"]=> string[30] "$assigned will have this value" }1
class
NULL NULL object[SimpleClass]#1 [1] { ["var"]=> string[30] "$assigned will have this value" }3
Nếu không có đối số nào được chuyển cho hàm tạo của lớp, ngoặc đơn sau khi tên lớp có thể bị bỏ qua.
bool[true] bool[true] bool[true]
Ví dụ #3 Tạo một thể hiện
Kể từ Php 8.0.0, sử dụng $this is defined [A]
Fatal error: Uncaught Error: Non-static method A::foo[] cannot be called statically in %s :27
Stack trace:
#0 {main}
thrown in %s on line 27
0 với các biểu thức tùy ý được hỗ trợ. Điều này cho phép khởi tạo phức tạp hơn nếu biểu thức tạo ra một chuỗi. Các biểu thức phải được bọc trong ngoặc đơn.
NULL NULL object[SimpleClass]#1 [1] { ["var"]=> string[30] "$assigned will have this value" }4
Ví dụ #4 Tạo một thể hiện bằng cách sử dụng biểu thức tùy ý
Trong ví dụ đã cho, chúng tôi hiển thị nhiều ví dụ về các biểu thức tùy ý hợp lệ tạo ra một tên lớp. Điều này cho thấy một cuộc gọi đến một hàm, nối chuỗi và hằng số ____22.: Prior to PHP 7.1, the arguments are not evaluated if there is no constructor function defined.
Trong bối cảnh lớp, có thể tạo một đối tượng mới bằng object[ClassA]#1 [0] {
}
object[ClassB]#1 [0] {
}
object[ClassC]#1 [0] {
}
object[ClassD]#1 [0] {
}
6 và object[ClassA]#1 [0] {
}
object[ClassB]#1 [0] {
}
object[ClassC]#1 [0] {
}
object[ClassD]#1 [0] {
}
7.
Khi gán một thể hiện đã được tạo của một lớp cho một biến mới, biến mới sẽ truy cập cùng một thể hiện với đối tượng được gán. Hành vi này là như nhau khi chuyển các trường hợp cho một hàm. Một bản sao của một đối tượng đã được tạo có thể được tạo bằng cách nhân bản nó.
Ví dụ #5 gán đối tượng
NULL NULL object[SimpleClass]#1 [1] { ["var"]=> string[30] "$assigned will have this value" }5
NULL NULL object[SimpleClass]#1 [1] { ["var"]=> string[30] "$assigned will have this value" }6
NULL NULL object[SimpleClass]#1 [1] { ["var"]=> string[30] "$assigned will have this value" }7
Nếu không có đối số nào được chuyển cho hàm tạo của lớp, ngoặc đơn sau khi tên lớp có thể bị bỏ qua.
Ví dụ #3 Tạo một thể hiện
Ví dụ #9 gọi một hàm ẩn danh được lưu trữ trong một thuộc tính
NULL NULL object[SimpleClass]#1 [1] { ["var"]=> string[30] "$assigned will have this value" }8
NULL NULL object[SimpleClass]#1 [1] { ["var"]=> string[30] "$assigned will have this value" }6
bool[true] bool[true] bool[true]0
Ví dụ trên sẽ xuất ra:
extends
Một lớp có thể kế thừa các hằng số, phương thức và thuộc tính của một lớp khác bằng cách sử dụng từ khóa
bool[true] bool[true] bool[true]1 trong khai báo lớp. Không thể mở rộng nhiều lớp; Một lớp chỉ có thể kế thừa từ một lớp cơ sở.
Các hằng số, phương thức và thuộc tính được di truyền có thể được ghi đè bằng cách tái cấu trúc chúng bằng cùng tên được xác định trong lớp cha. Tuy nhiên, nếu lớp cha đã xác định một phương thức hoặc không đổi là cuối cùng, chúng có thể không bị ghi đè. Có thể truy cập các phương thức được ghi đè hoặc thuộc tính tĩnh bằng cách tham chiếu chúng với cha mẹ ::.
Lưu ý: Kể từ Php 8.1.0, hằng số có thể được khai báo là cuối cùng.: As of PHP 8.1.0, constants may be declared as final.
Ví dụ #10 Kế thừa lớp đơn giản
bool[true] bool[true] bool[true]2
Ví dụ trên sẽ xuất ra:
Extending class a default value
Một lớp có thể kế thừa các hằng số, phương thức và thuộc tính của một lớp khác bằng cách sử dụng từ khóa bool[true]
bool[true]
bool[true]
1 trong khai báo lớp. Không thể mở rộng nhiều lớp; Một lớp chỉ có thể kế thừa từ một lớp cơ sở.
Các hằng số, phương thức và thuộc tính được di truyền có thể được ghi đè bằng cách tái cấu trúc chúng bằng cùng tên được xác định trong lớp cha. Tuy nhiên, nếu lớp cha đã xác định một phương thức hoặc không đổi là cuối cùng, chúng có thể không bị ghi đè. Có thể truy cập các phương thức được ghi đè hoặc thuộc tính tĩnh bằng cách tham chiếu chúng với cha mẹ ::.bool[true]
bool[true]
bool[true]
3 level error is generated. A signature is compatible if it respects the
variance rules, makes a mandatory parameter optional, and if any new parameters are optional. This is known as the Liskov Substitution Principle, or LSP for short. The constructor, and
bool[true] bool[true] bool[true]4 methods are exempt from these signature compatibility rules, and thus won't emit a fatal error in case of a signature mismatch.
Lưu ý: Kể từ Php 8.1.0, hằng số có thể được khai báo là cuối cùng.
bool[true] bool[true] bool[true]5
class
bool[true] bool[true] bool[true]7
Ví dụ trên sẽ xuất ra:
Một lớp có thể kế thừa các hằng số, phương thức và thuộc tính của một lớp khác bằng cách sử dụng từ khóa
bool[true] bool[true] bool[true]1 trong khai báo lớp. Không thể mở rộng nhiều lớp; Một lớp chỉ có thể kế thừa từ một lớp cơ sở.
Các hằng số, phương thức và thuộc tính được di truyền có thể được ghi đè bằng cách tái cấu trúc chúng bằng cùng tên được xác định trong lớp cha. Tuy nhiên, nếu lớp cha đã xác định một phương thức hoặc không đổi là cuối cùng, chúng có thể không bị ghi đè. Có thể truy cập các phương thức được ghi đè hoặc thuộc tính tĩnh bằng cách tham chiếu chúng với cha mẹ ::.
bool[true] bool[true] bool[true]8
class
Extending class a default value0
Lưu ý: Kể từ Php 8.1.0, hằng số có thể được khai báo là cuối cùng.
Fatal error: Declaration of Extend::foo[] must be compatible with Base::foo[int $a = 5] in /in/evtlq on line 13
Ví dụ #10 Kế thừa lớp đơn giản
bool[true] bool[true] bool[true]8
class
Extending class a default value3
Lưu ý: Kể từ Php 8.1.0, hằng số có thể được khai báo là cuối cùng.
Fatal error: Declaration of Extend::foo[int $a] must be compatible with Base::foo[int $a = 5] in /in/qJXVC on line 13
Ví dụ #10 Kế thừa lớp đơn giản
Quy tắc tương thích chữ kýError if named arguments are used.
Khi ghi đè một phương thức, chữ ký của nó phải tương thích với phương thức mẹ. Mặt khác, một lỗi nghiêm trọng được phát ra, hoặc, trước Php 8.0.0, một lỗi cấp độ bool[true]
bool[true]
bool[true]
3 được tạo ra. Chữ ký là tương thích nếu nó tôn trọng các quy tắc phương sai, tạo ra một tham số bắt buộc tùy chọn và nếu bất kỳ tham số mới nào là tùy chọn. Điều này được gọi là nguyên tắc thay thế Liskov, hoặc viết tắt là LSP. Các phương thức xây dựng và bool[true]
bool[true]
bool[true]
4 được miễn trừ khỏi các quy tắc tương thích chữ ký này và do đó sẽ không phát ra lỗi nghiêm trọng trong trường hợp không khớp chữ ký.
Extending class a default value4
class
Extending class a default value6
Ví dụ #11 Phương pháp trẻ em tương thích
Fatal error: Uncaught Error: Unknown named parameter $foo in /in/XaaeN:14 Stack trace: #0 {main} thrown in /in/XaaeN on line 14
::class
Các ví dụ sau đây chứng minh rằng một phương thức con sẽ loại bỏ tham số hoặc làm cho một tham số tùy chọn bắt buộc, không tương thích với phương thức mẹ.
Ví dụ #12 Lỗi gây tử vong khi phương pháp con xóa tham số
Fatal error: Declaration of Extend::foo[] must be compatible with Base::foo[int $a = 5] in /in/evtlq on line 130
Fatal error: Declaration of Extend::foo[] must be compatible with Base::foo[int $a = 5] in /in/evtlq on line 131
Fatal error: Declaration of Extend::foo[] must be compatible with Base::foo[int $a = 5] in /in/evtlq on line 132
Ví dụ trên sẽ xuất ra:
Đầu ra của ví dụ trên trong Php 8 tương tự như::
Ví dụ #13 Lỗi nghiêm trọng khi phương thức con bắt buộc tham số tùy chọn bắt buộc
Cảnh báo
Fatal error: Declaration of Extend::foo[] must be compatible with Base::foo[int $a = 5] in /in/evtlq on line 134Ví dụ trên sẽ xuất ra:
Đổi tên tham số của một phương thức trong một lớp con không phải là sự không tương thích của chữ ký. Tuy nhiên, điều này không được khuyến khích vì nó sẽ dẫn đến một lỗi thời gian chạy nếu các đối số được đặt tên được sử dụng.get_class[] on the object.
Ví dụ #Lỗi 14 Khi sử dụng các đối số và tham số được đặt tên được đổi tên trong lớp con
Fatal error: Declaration of Extend::foo[] must be compatible with Base::foo[int $a = 5] in /in/evtlq on line 136
Ví dụ trên sẽ xuất ra:
Ví dụ trên sẽ xuất ra một cái gì đó tương tự như:
Từ khóa class
cũng được sử dụng để giải quyết tên lớp. Để có được tên đủ điều kiện của lớp
Extending class a default value8 sử dụng
Extending class a default value9. Điều này đặc biệt hữu ích với các lớp theo tên.
Fatal error: Declaration of Extend::foo[] must be compatible with Base::foo[int $a = 5] in /in/evtlq on line 138 then
Fatal error: Declaration of Extend::foo[] must be compatible with Base::foo[int $a = 5] in /in/evtlq on line 138 will be returned rather than an exception thrown. If the dereference is part of a chain, the rest of the chain is skipped.
Ví dụ #15 Độ phân giải tên lớpis_null[] check first, but more compact.
Ghi chú:
Fatal error: Declaration of Extend::foo[int $a] must be compatible with Base::foo[int $a = 5] in /in/qJXVC on line 130
Đầu ra của ví dụ trên trong Php 8 tương tự như::
Ví dụ #13 Lỗi nghiêm trọng khi phương thức con bắt buộc tham số tùy chọn bắt buộc
Cảnh báo ¶
Đổi tên tham số của một phương thức trong một lớp con không phải là sự không tương thích của chữ ký. Tuy nhiên, điều này không được khuyến khích vì nó sẽ dẫn đến một lỗi thời gian chạy nếu các đối số được đặt tên được sử dụng.
Fatal error: Declaration of Extend::foo[int $a] must be compatible with Base::foo[int $a = 5] in /in/qJXVC on line 131
Fatal error: Declaration of Extend::foo[int $a] must be compatible with Base::foo[int $a = 5] in /in/qJXVC on line 132
Fatal error: Declaration of Extend::foo[int $a] must be compatible with Base::foo[int $a = 5] in /in/qJXVC on line 133
Fatal error: Declaration of Extend::foo[int $a] must be compatible with Base::foo[int $a = 5] in /in/qJXVC on line 134
Fatal error: Declaration of Extend::foo[int $a] must be compatible with Base::foo[int $a = 5] in /in/qJXVC on line 135
Fatal error: Declaration of Extend::foo[int $a] must be compatible with Base::foo[int $a = 5] in /in/qJXVC on line 136
Fatal error: Declaration of Extend::foo[int $a] must be compatible with Base::foo[int $a = 5] in /in/qJXVC on line 137
Fatal error: Declaration of Extend::foo[int $a] must be compatible with Base::foo[int $a = 5] in /in/qJXVC on line 138
Ví dụ #Lỗi 14 Khi sử dụng các đối số và tham số được đặt tên được đổi tên trong lớp con ¶
Ví dụ trên sẽ xuất ra một cái gì đó tương tự như:
Fatal error: Declaration of Extend::foo[int $a] must be compatible with Base::foo[int $a = 5] in /in/qJXVC on line 139
Từ khóa class
cũng được sử dụng để giải quyết tên lớp. Để có được tên đủ điều kiện của lớp Extending class
a default value
8 sử dụng Extending class
a default value
9. Điều này đặc biệt hữu ích với các lớp theo tên. ¶
Ví dụ #15 Độ phân giải tên lớp
Fatal error: Uncaught Error: Unknown named parameter $foo in /in/XaaeN:14 Stack trace: #0 {main} thrown in /in/XaaeN on line 140
Ghi chú: ¶
Độ phân giải tên lớp sử dụng object[ClassA]#1 [0] {
}
object[ClassB]#1 [0] {
}
object[ClassC]#1 [0] {
}
object[ClassD]#1 [0] {
}
2 là chuyển đổi thời gian biên dịch. Điều đó có nghĩa là tại thời điểm chuỗi tên lớp được tạo chưa có tự động tải đã xảy ra. Kết quả là, tên lớp được mở rộng ngay cả khi lớp không tồn tại. Không có lỗi được ban hành trong trường hợp đó.
Fatal error: Uncaught Error: Unknown named parameter $foo in /in/XaaeN:14 Stack trace: #0 {main} thrown in /in/XaaeN on line 141
Fatal error: Uncaught Error: Unknown named parameter $foo in /in/XaaeN:14 Stack trace: #0 {main} thrown in /in/XaaeN on line 142
Fatal error: Uncaught Error: Unknown named parameter $foo in /in/XaaeN:14 Stack trace: #0 {main} thrown in /in/XaaeN on line 143
Fatal error: Uncaught Error: Unknown named parameter $foo in /in/XaaeN:14 Stack trace: #0 {main} thrown in /in/XaaeN on line 144
Fatal error: Uncaught Error: Unknown named parameter $foo in /in/XaaeN:14 Stack trace: #0 {main} thrown in /in/XaaeN on line 145
Fatal error: Uncaught Error: Unknown named parameter $foo in /in/XaaeN:14 Stack trace: #0 {main} thrown in /in/XaaeN on line 146
Fatal error: Uncaught Error: Unknown named parameter $foo in /in/XaaeN:14 Stack trace: #0 {main} thrown in /in/XaaeN on line 147
Ví dụ #16 Thiếu độ phân giải tên lớp ¶
Kể từ Php 8.0.0, hằng số object[ClassA]#1 [0] {
}
object[ClassB]#1 [0] {
}
object[ClassC]#1 [0] {
}
object[ClassD]#1 [0] {
}
2 cũng có thể được sử dụng trên các đối tượng. Độ phân giải này xảy ra vào thời gian chạy, không phải thời gian biên dịch. Hiệu ứng của nó giống như gọi get_class [] trên đối tượng.
Fatal error: Uncaught Error: Unknown named parameter $foo in /in/XaaeN:14 Stack trace: #0 {main} thrown in /in/XaaeN on line 148
Ví dụ #17 Độ phân giải tên đối tượng ¶
Đổi tên tham số của một phương thức trong một lớp con không phải là sự không tương thích của chữ ký. Tuy nhiên, điều này không được khuyến khích vì nó sẽ dẫn đến một lỗi thời gian chạy nếu các đối số được đặt tên được sử dụng.
Fatal error: Uncaught Error: Unknown named parameter $foo in /in/XaaeN:14 Stack trace: #0 {main} thrown in /in/XaaeN on line 149
class
0
class
1
class
2
class
3
class
4Ví dụ #Lỗi 14 Khi sử dụng các đối số và tham số được đặt tên được đổi tên trong lớp con ¶
Ví dụ trên sẽ xuất ra một cái gì đó tương tự như:
class
5
class
6
class
7
class
8
Fatal error: Declaration of Extend::foo[int $a] must be compatible with Base::foo[int $a = 5] in /in/qJXVC on line 138
Ẩn danh ¶ ¶
4 năm trước
$this is defined [A] Fatal error: Uncaught Error: Non-static method A::foo[] cannot be called statically in %s :27 Stack trace: #0 {main} thrown in %s on line 2700
Johannes Dot Kingma tại Gmail Dot Com ¶ ¶
11 thàng trước
$this is defined [A] Fatal error: Uncaught Error: Non-static method A::foo[] cannot be called statically in %s :27 Stack trace: #0 {main} thrown in %s on line 2701
$this is defined [A] Fatal error: Uncaught Error: Non-static method A::foo[] cannot be called statically in %s :27 Stack trace: #0 {main} thrown in %s on line 2702
$this is defined [A] Fatal error: Uncaught Error: Non-static method A::foo[] cannot be called statically in %s :27 Stack trace: #0 {main} thrown in %s on line 2703
$this is defined [A] Fatal error: Uncaught Error: Non-static method A::foo[] cannot be called statically in %s :27 Stack trace: #0 {main} thrown in %s on line 2704
$this is defined [A] Fatal error: Uncaught Error: Non-static method A::foo[] cannot be called statically in %s :27 Stack trace: #0 {main} thrown in %s on line 2705
Fatal error: Declaration of Extend::foo[int $a] must be compatible with Base::foo[int $a = 5] in /in/qJXVC on line 138
Moty66 tại Gmail Dot Com ¶ ¶
13 năm trước
$this is defined [A] Fatal error: Uncaught Error: Non-static method A::foo[] cannot be called statically in %s :27 Stack trace: #0 {main} thrown in %s on line 2707
$this is defined [A] Fatal error: Uncaught Error: Non-static method A::foo[] cannot be called statically in %s :27 Stack trace: #0 {main} thrown in %s on line 2708
$this is defined [A] Fatal error: Uncaught Error: Non-static method A::foo[] cannot be called statically in %s :27 Stack trace: #0 {main} thrown in %s on line 2709
$this is defined [A] Fatal error: Uncaught Error: Non-static method A::foo[] cannot be called statically in %s :27 Stack trace: #0 {main} thrown in %s on line 2710
Jeffrey ¶ ¶
14 năm trước
$this is defined [A] Fatal error: Uncaught Error: Non-static method A::foo[] cannot be called statically in %s :27 Stack trace: #0 {main} thrown in %s on line 2711
$this is defined [A] Fatal error: Uncaught Error: Non-static method A::foo[] cannot be called statically in %s :27 Stack trace: #0 {main} thrown in %s on line 2712
$this is defined [A] Fatal error: Uncaught Error: Non-static method A::foo[] cannot be called statically in %s :27 Stack trace: #0 {main} thrown in %s on line 2713
$this is defined [A] Fatal error: Uncaught Error: Non-static method A::foo[] cannot be called statically in %s :27 Stack trace: #0 {main} thrown in %s on line 2714
$this is defined [A] Fatal error: Uncaught Error: Non-static method A::foo[] cannot be called statically in %s :27 Stack trace: #0 {main} thrown in %s on line 2715
Ẩn danh ¶ ¶
5 năm trước
$this is defined [A] Fatal error: Uncaught Error: Non-static method A::foo[] cannot be called statically in %s :27 Stack trace: #0 {main} thrown in %s on line 2716
$this is defined [A] Fatal error: Uncaught Error: Non-static method A::foo[] cannot be called statically in %s :27 Stack trace: #0 {main} thrown in %s on line 2717
$this is defined [A] Fatal error: Uncaught Error: Non-static method A::foo[] cannot be called statically in %s :27 Stack trace: #0 {main} thrown in %s on line 2718
Fatal error: Declaration of Extend::foo[int $a] must be compatible with Base::foo[int $a = 5] in /in/qJXVC on line 138
Thisleenoble tại dopeoplestillnospam dot me dot com ¶ ¶
1 năm trước
$this is defined [A] Fatal error: Uncaught Error: Non-static method A::foo[] cannot be called statically in %s :27 Stack trace: #0 {main} thrown in %s on line 2720
$this is defined [A] Fatal error: Uncaught Error: Non-static method A::foo[] cannot be called statically in %s :27 Stack trace: #0 {main} thrown in %s on line 2721
$this is defined [A] Fatal error: Uncaught Error: Non-static method A::foo[] cannot be called statically in %s :27 Stack trace: #0 {main} thrown in %s on line 2714
$this is defined [A] Fatal error: Uncaught Error: Non-static method A::foo[] cannot be called statically in %s :27 Stack trace: #0 {main} thrown in %s on line 2723