Này, tôi đang tự hỏi làm thế nào điều này được thực hiện như khi tôi thử mã sau trong một hàm của lớp nó tạo ra một số lỗi PHP mà tôi không thể bắt được
public $tasks;
$this->tasks = new tasks[$this];
$this->tasks->test[];
Tôi không biết tại sao sự khởi đầu của lớp cũng yêu cầu $ đây là một tham số: s
cảm ơn
class admin
{
function validate[]
{
if[!$_SESSION['level']==7]{
barMsg['YOU\'RE NOT ADMIN', 0];
return FALSE;
}else{
**public $tasks;** // The line causing the problem
$this->tasks = new tasks[]; // Get rid of $this->
$this->tasks->test[]; // Get rid of $this->
$this->showPanel[];
}
}
}
class tasks
{
function test[]
{
echo 'test';
}
}
$admin = new admin[];
$admin->validate[];
Đã hỏi ngày 23 tháng 9 năm 2009 lúc 21:31Sep 23, 2009 at 21:31
SupernovahsupernovahSupernovah
1.88612 Huy hiệu vàng34 Huy hiệu bạc 50 Huy hiệu Đồng12 gold badges34 silver badges50 bronze badges
2
Bạn không thể khai báo các tác vụ $ công khai bên trong phương thức của lớp [chức năng.] Nếu bạn không cần sử dụng đối tượng tác vụ bên ngoài phương thức đó, bạn chỉ có thể làm:
$tasks = new Tasks[$this];
$tasks->test[];
Bạn chỉ cần sử dụng "$ this->" khi bạn sử dụng một biến mà bạn muốn có sẵn trong suốt lớp.
Hai lựa chọn của bạn:
class Foo
{
public $tasks;
function doStuff[]
{
$this->tasks = new Tasks[];
$this->tasks->test[];
}
function doSomethingElse[]
{
// you'd have to check that the method above ran and instantiated this
// and that $this->tasks is a tasks object
$this->tasks->blah[];
}
}
hoặc
class Foo
{
function doStuff[]
{
$tasks = new tasks[];
$tasks->test[];
}
}
với mã của bạn:
class Admin
{
function validate[]
{
// added this so it will execute
$_SESSION['level'] = 7;
if [! $_SESSION['level'] == 7] {
// barMsg['YOU\'RE NOT ADMIN', 0];
return FALSE;
} else {
$tasks = new Tasks[];
$tasks->test[];
$this->showPanel[];
}
}
function showPanel[]
{
// added this for test
}
}
class Tasks
{
function test[]
{
echo 'test';
}
}
$admin = new Admin[];
$admin->validate[];
ra ngoài
73.4K20 Huy hiệu vàng146 Huy hiệu bạc216 Huy hiệu đồng20 gold badges146 silver badges216 bronze badges
Đã trả lời ngày 23 tháng 9 năm 2009 lúc 21:37Sep 23, 2009 at 21:37
Lance Kidwelllance KidwellLance Kidwell
8531 Huy hiệu vàng14 Huy hiệu bạc18 Huy hiệu đồng1 gold badge14 silver badges18 bronze badges
0
Bạn có vấn đề là với dòng mã này:
public $tasks;
$this->tasks = new tasks[];
$this->tasks->test[];
$this->showPanel[];
Từ khóa
class admin
{
function validate[]
{
if[!$_SESSION['level']==7]{
barMsg['YOU\'RE NOT ADMIN', 0];
return FALSE;
}else{
**public $tasks;** // The line causing the problem
$this->tasks = new tasks[]; // Get rid of $this->
$this->tasks->test[]; // Get rid of $this->
$this->showPanel[];
}
}
}
class tasks
{
function test[]
{
echo 'test';
}
}
$admin = new admin[];
$admin->validate[];
6 được sử dụng trong định nghĩa của lớp, không phải trong một phương thức của lớp. Trong PHP, bạn thậm chí không cần phải khai báo biến thành viên trong lớp, bạn chỉ có thể làm class admin
{
function validate[]
{
if[!$_SESSION['level']==7]{
barMsg['YOU\'RE NOT ADMIN', 0];
return FALSE;
}else{
**public $tasks;** // The line causing the problem
$this->tasks = new tasks[]; // Get rid of $this->
$this->tasks->test[]; // Get rid of $this->
$this->showPanel[];
}
}
}
class tasks
{
function test[]
{
echo 'test';
}
}
$admin = new admin[];
$admin->validate[];
7 và nó được thêm vào cho bạn.Đã trả lời ngày 23 tháng 9 năm 2009 lúc 21:44Sep 23, 2009 at 21:44
Davidtbernaldavidtbernaldavidtbernal
13.2k9 Huy hiệu vàng44 Huy hiệu bạc59 Huy hiệu đồng9 gold badges44 silver badges59 bronze badges
class
Hayley Watson ¶
4 năm trước
WBCarts tại Juno Dot Com ¶
Ghi chú về STDCLASS ¶
$tasks = new Tasks[$this];
$tasks->test[];
013 năm trước
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
$tasks = new Tasks[$this];
$tasks->test[];
1class admin
{
function validate[]
{
if[!$_SESSION['level']==7]{
barMsg['YOU\'RE NOT ADMIN', 0];
return FALSE;
}else{
**public $tasks;** // The line causing the problem
$this->tasks = new tasks[]; // Get rid of $this->
$this->tasks->test[]; // Get rid of $this->
$this->showPanel[];
}
}
}
class tasks
{
function test[]
{
echo 'test';
}
}
$admin = new admin[];
$admin->validate[];
8$tasks = new Tasks[$this];
$tasks->test[];
3Đầ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
$tasks = new Tasks[$this];
$tasks->test[];
4 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
$tasks = new Tasks[$this];
$tasks->test[];
4, 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 $tasks = new Tasks[$this];
$tasks->test[];
4, 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
$tasks = new Tasks[$this];
$tasks->test[];
6Kể từ Php 8.0.0, sử dụng
$tasks = new Tasks[$this];
$tasks->test[];
4 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ố
$tasks = new Tasks[$this];
$tasks->test[];
8.$tasks = new Tasks[$this];
$tasks->test[];
8 constant. $tasks = new Tasks[$this];
$tasks->test[];
9class Foo
{
public $tasks;
function doStuff[]
{
$this->tasks = new Tasks[];
$this->tasks->test[];
}
function doSomethingElse[]
{
// you'd have to check that the method above ran and instantiated this
// and that $this->tasks is a tasks object
$this->tasks->blah[];
}
}
0class Foo
{
public $tasks;
function doStuff[]
{
$this->tasks = new Tasks[];
$this->tasks->test[];
}
function doSomethingElse[]
{
// you'd have to check that the method above ran and instantiated this
// and that $this->tasks is a tasks object
$this->tasks->blah[];
}
}
1Đầ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
$tasks = new Tasks[$this];
$tasks->test[];
4 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
$tasks = new Tasks[$this];
$tasks->test[];
4, 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ú:
class Foo
{
public $tasks;
function doStuff[]
{
$this->tasks = new Tasks[];
$this->tasks->test[];
}
function doSomethingElse[]
{
// you'd have to check that the method above ran and instantiated this
// and that $this->tasks is a tasks object
$this->tasks->blah[];
}
}
4class Foo
{
public $tasks;
function doStuff[]
{
$this->tasks = new Tasks[];
$this->tasks->test[];
}
function doSomethingElse[]
{
// you'd have to check that the method above ran and instantiated this
// and that $this->tasks is a tasks object
$this->tasks->blah[];
}
}
5class Foo
{
public $tasks;
function doStuff[]
{
$this->tasks = new Tasks[];
$this->tasks->test[];
}
function doSomethingElse[]
{
// you'd have to check that the method above ran and instantiated this
// and that $this->tasks is a tasks object
$this->tasks->blah[];
}
}
6Nế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.
class admin
{
function validate[]
{
if[!$_SESSION['level']==7]{
barMsg['YOU\'RE NOT ADMIN', 0];
return FALSE;
}else{
**public $tasks;** // The line causing the problem
$this->tasks = new tasks[]; // Get rid of $this->
$this->tasks->test[]; // Get rid of $this->
$this->showPanel[];
}
}
}
class tasks
{
function test[]
{
echo 'test';
}
}
$admin = new admin[];
$admin->validate[];
0Ví dụ #3 Tạo một thể hiện
Kể từ Php 8.0.0, sử dụng
4 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.$tasks = new Tasks[$this];
$tasks->test[];
class Foo
{
public $tasks;
function doStuff[]
{
$this->tasks = new Tasks[];
$this->tasks->test[];
}
function doSomethingElse[]
{
// you'd have to check that the method above ran and instantiated this
// and that $this->tasks is a tasks object
$this->tasks->blah[];
}
}
7class admin
{
function validate[]
{
if[!$_SESSION['level']==7]{
barMsg['YOU\'RE NOT ADMIN', 0];
return FALSE;
}else{
**public $tasks;** // The line causing the problem
$this->tasks = new tasks[]; // Get rid of $this->
$this->tasks->test[]; // Get rid of $this->
$this->showPanel[];
}
}
}
class tasks
{
function test[]
{
echo 'test';
}
}
$admin = new admin[];
$admin->validate[];
8class Foo
{
public $tasks;
function doStuff[]
{
$this->tasks = new Tasks[];
$this->tasks->test[];
}
function doSomethingElse[]
{
// you'd have to check that the method above ran and instantiated this
// and that $this->tasks is a tasks object
$this->tasks->blah[];
}
}
9Nế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.
class admin
{
function validate[]
{
if[!$_SESSION['level']==7]{
barMsg['YOU\'RE NOT ADMIN', 0];
return FALSE;
}else{
**public $tasks;** // The line causing the problem
$this->tasks = new tasks[]; // Get rid of $this->
$this->tasks->test[]; // Get rid of $this->
$this->showPanel[];
}
}
}
class tasks
{
function test[]
{
echo 'test';
}
}
$admin = new admin[];
$admin->validate[];
1Ví dụ #3 Tạo một thể hiện
Kể từ Php 8.0.0, sử dụng
4 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.$tasks = new Tasks[$this];
$tasks->test[];
class Foo
{
function doStuff[]
{
$tasks = new tasks[];
$tasks->test[];
}
}
0Ví 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ố
8.: Prior to PHP 7.1, the arguments are not evaluated if there is no constructor function defined.$tasks = new Tasks[$this]; $tasks->test[];
Trong bối cảnh lớp, có thể tạo một đối tượng mới bằng class Foo
{
public $tasks;
function doStuff[]
{
$this->tasks = new Tasks[];
$this->tasks->test[];
}
function doSomethingElse[]
{
// you'd have to check that the method above ran and instantiated this
// and that $this->tasks is a tasks object
$this->tasks->blah[];
}
}
2 và class Foo
{
public $tasks;
function doStuff[]
{
$this->tasks = new Tasks[];
$this->tasks->test[];
}
function doSomethingElse[]
{
// you'd have to check that the method above ran and instantiated this
// and that $this->tasks is a tasks object
$this->tasks->blah[];
}
}
3.
class Foo
{
public $tasks;
function doStuff[]
{
$this->tasks = new Tasks[];
$this->tasks->test[];
}
function doSomethingElse[]
{
// you'd have to check that the method above ran and instantiated this
// and that $this->tasks is a tasks object
$this->tasks->blah[];
}
}
class Foo
{
public $tasks;
function doStuff[]
{
$this->tasks = new Tasks[];
$this->tasks->test[];
}
function doSomethingElse[]
{
// you'd have to check that the method above ran and instantiated this
// and that $this->tasks is a tasks object
$this->tasks->blah[];
}
}
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
class Foo
{
function doStuff[]
{
$tasks = new tasks[];
$tasks->test[];
}
}
1class Foo
{
function doStuff[]
{
$tasks = new tasks[];
$tasks->test[];
}
}
2class Foo
{
function doStuff[]
{
$tasks = new tasks[];
$tasks->test[];
}
}
3Nế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
Kể từ Php 8.0.0, sử dụng
4 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.$tasks = new Tasks[$this];
$tasks->test[];
class Foo
{
function doStuff[]
{
$tasks = new tasks[];
$tasks->test[];
}
}
4class Foo
{
function doStuff[]
{
$tasks = new tasks[];
$tasks->test[];
}
}
2class Foo
{
function doStuff[]
{
$tasks = new tasks[];
$tasks->test[];
}
}
6Nế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.
extends
Ví dụ #3 Tạo một thể hiện
Kể từ Php 8.0.0, sử dụng
$tasks = new Tasks[$this];
$tasks->test[];
4 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.Ví dụ #4 Tạo một thể hiện bằng cách sử dụng biểu thức tùy ý: As of PHP 8.1.0, constants may be declared as final.
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ố
8.$tasks = new Tasks[$this];
$tasks->test[];
class Foo
{
function doStuff[]
{
$tasks = new tasks[];
$tasks->test[];
}
}
8Nế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.
class admin
{
function validate[]
{
if[!$_SESSION['level']==7]{
barMsg['YOU\'RE NOT ADMIN', 0];
return FALSE;
}else{
**public $tasks;** // The line causing the problem
$this->tasks = new tasks[]; // Get rid of $this->
$this->tasks->test[]; // Get rid of $this->
$this->showPanel[];
}
}
}
class tasks
{
function test[]
{
echo 'test';
}
}
$admin = new admin[];
$admin->validate[];
2Ví dụ #3 Tạo một thể hiện
Kể từ Php 8.0.0, sử dụng
$tasks = new Tasks[$this];
$tasks->test[];
4 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.class Foo
{
function doStuff[]
{
$tasks = new tasks[];
$tasks->test[];
}
}
9 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 class Admin
{
function validate[]
{
// added this so it will execute
$_SESSION['level'] = 7;
if [! $_SESSION['level'] == 7] {
// barMsg['YOU\'RE NOT ADMIN', 0];
return FALSE;
} else {
$tasks = new Tasks[];
$tasks->test[];
$this->showPanel[];
}
}
function showPanel[]
{
// added this for test
}
}
class Tasks
{
function test[]
{
echo 'test';
}
}
$admin = new Admin[];
$admin->validate[];
0 methods are exempt from these signature compatibility rules, and thus won't emit a fatal error in case
of a signature mismatch. Ví dụ #11 Phương pháp trẻ em tương thích
class Admin
{
function validate[]
{
// added this so it will execute
$_SESSION['level'] = 7;
if [! $_SESSION['level'] == 7] {
// barMsg['YOU\'RE NOT ADMIN', 0];
return FALSE;
} else {
$tasks = new Tasks[];
$tasks->test[];
$this->showPanel[];
}
}
function showPanel[]
{
// added this for test
}
}
class Tasks
{
function test[]
{
echo 'test';
}
}
$admin = new Admin[];
$admin->validate[];
1class admin
{
function validate[]
{
if[!$_SESSION['level']==7]{
barMsg['YOU\'RE NOT ADMIN', 0];
return FALSE;
}else{
**public $tasks;** // The line causing the problem
$this->tasks = new tasks[]; // Get rid of $this->
$this->tasks->test[]; // Get rid of $this->
$this->showPanel[];
}
}
}
class tasks
{
function test[]
{
echo 'test';
}
}
$admin = new admin[];
$admin->validate[];
8class Admin
{
function validate[]
{
// added this so it will execute
$_SESSION['level'] = 7;
if [! $_SESSION['level'] == 7] {
// barMsg['YOU\'RE NOT ADMIN', 0];
return FALSE;
} else {
$tasks = new Tasks[];
$tasks->test[];
$this->showPanel[];
}
}
function showPanel[]
{
// added this for test
}
}
class Tasks
{
function test[]
{
echo 'test';
}
}
$admin = new Admin[];
$admin->validate[];
3Ví dụ trên sẽ xuất ra:
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ố
class Admin
{
function validate[]
{
// added this so it will execute
$_SESSION['level'] = 7;
if [! $_SESSION['level'] == 7] {
// barMsg['YOU\'RE NOT ADMIN', 0];
return FALSE;
} else {
$tasks = new Tasks[];
$tasks->test[];
$this->showPanel[];
}
}
function showPanel[]
{
// added this for test
}
}
class Tasks
{
function test[]
{
echo 'test';
}
}
$admin = new Admin[];
$admin->validate[];
4class admin
{
function validate[]
{
if[!$_SESSION['level']==7]{
barMsg['YOU\'RE NOT ADMIN', 0];
return FALSE;
}else{
**public $tasks;** // The line causing the problem
$this->tasks = new tasks[]; // Get rid of $this->
$this->tasks->test[]; // Get rid of $this->
$this->showPanel[];
}
}
}
class tasks
{
function test[]
{
echo 'test';
}
}
$admin = new admin[];
$admin->validate[];
8class Admin
{
function validate[]
{
// added this so it will execute
$_SESSION['level'] = 7;
if [! $_SESSION['level'] == 7] {
// barMsg['YOU\'RE NOT ADMIN', 0];
return FALSE;
} else {
$tasks = new Tasks[];
$tasks->test[];
$this->showPanel[];
}
}
function showPanel[]
{
// added this for test
}
}
class Tasks
{
function test[]
{
echo 'test';
}
}
$admin = new Admin[];
$admin->validate[];
6Đầu ra của ví dụ trên trong Php 8 tương tự như:
class admin
{
function validate[]
{
if[!$_SESSION['level']==7]{
barMsg['YOU\'RE NOT ADMIN', 0];
return FALSE;
}else{
**public $tasks;** // The line causing the problem
$this->tasks = new tasks[]; // Get rid of $this->
$this->tasks->test[]; // Get rid of $this->
$this->showPanel[];
}
}
}
class tasks
{
function test[]
{
echo 'test';
}
}
$admin = new admin[];
$admin->validate[];
3Ví 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
class Admin
{
function validate[]
{
// added this so it will execute
$_SESSION['level'] = 7;
if [! $_SESSION['level'] == 7] {
// barMsg['YOU\'RE NOT ADMIN', 0];
return FALSE;
} else {
$tasks = new Tasks[];
$tasks->test[];
$this->showPanel[];
}
}
function showPanel[]
{
// added this for test
}
}
class Tasks
{
function test[]
{
echo 'test';
}
}
$admin = new Admin[];
$admin->validate[];
4class admin
{
function validate[]
{
if[!$_SESSION['level']==7]{
barMsg['YOU\'RE NOT ADMIN', 0];
return FALSE;
}else{
**public $tasks;** // The line causing the problem
$this->tasks = new tasks[]; // Get rid of $this->
$this->tasks->test[]; // Get rid of $this->
$this->showPanel[];
}
}
}
class tasks
{
function test[]
{
echo 'test';
}
}
$admin = new admin[];
$admin->validate[];
8class Admin
{
function validate[]
{
// added this so it will execute
$_SESSION['level'] = 7;
if [! $_SESSION['level'] == 7] {
// barMsg['YOU\'RE NOT ADMIN', 0];
return FALSE;
} else {
$tasks = new Tasks[];
$tasks->test[];
$this->showPanel[];
}
}
function showPanel[]
{
// added this for test
}
}
class Tasks
{
function test[]
{
echo 'test';
}
}
$admin = new Admin[];
$admin->validate[];
9Đầu ra của ví dụ trên trong Php 8 tương tự như:
class admin
{
function validate[]
{
if[!$_SESSION['level']==7]{
barMsg['YOU\'RE NOT ADMIN', 0];
return FALSE;
}else{
**public $tasks;** // The line causing the problem
$this->tasks = new tasks[]; // Get rid of $this->
$this->tasks->test[]; // Get rid of $this->
$this->showPanel[];
}
}
}
class tasks
{
function test[]
{
echo 'test';
}
}
$admin = new admin[];
$admin->validate[];
4Ví 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áoError if named arguments are used.
Đổ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.
public $tasks;
$this->tasks = new tasks[];
$this->tasks->test[];
$this->showPanel[];
0class admin
{
function validate[]
{
if[!$_SESSION['level']==7]{
barMsg['YOU\'RE NOT ADMIN', 0];
return FALSE;
}else{
**public $tasks;** // The line causing the problem
$this->tasks = new tasks[]; // Get rid of $this->
$this->tasks->test[]; // Get rid of $this->
$this->showPanel[];
}
}
}
class tasks
{
function test[]
{
echo 'test';
}
}
$admin = new admin[];
$admin->validate[];
8public $tasks;
$this->tasks = new tasks[];
$this->tasks->test[];
$this->showPanel[];
2Ví 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
class admin
{
function validate[]
{
if[!$_SESSION['level']==7]{
barMsg['YOU\'RE NOT ADMIN', 0];
return FALSE;
}else{
**public $tasks;** // The line causing the problem
$this->tasks = new tasks[]; // Get rid of $this->
$this->tasks->test[]; // Get rid of $this->
$this->showPanel[];
}
}
}
class tasks
{
function test[]
{
echo 'test';
}
}
$admin = new admin[];
$admin->validate[];
5::class
Ví dụ trên sẽ xuất ra một cái gì đó tương tự như:
Từ khóa
8 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 class admin
{
function validate[]
{
if[!$_SESSION['level']==7]{
barMsg['YOU\'RE NOT ADMIN', 0];
return FALSE;
}else{
**public $tasks;** // The line causing the problem
$this->tasks = new tasks[]; // Get rid of $this->
$this->tasks->test[]; // Get rid of $this->
$this->showPanel[];
}
}
}
class tasks
{
function test[]
{
echo 'test';
}
}
$admin = new admin[];
$admin->validate[];
4 sử dụng public $tasks;
$this->tasks = new tasks[];
$this->tasks->test[];
$this->showPanel[];
5. Điều này đặc biệt hữu ích với các lớp theo tên.public $tasks;
$this->tasks = new tasks[];
$this->tasks->test[];
$this->showPanel[];
public $tasks;
$this->tasks = new tasks[];
$this->tasks->test[];
$this->showPanel[];
6public $tasks;
$this->tasks = new tasks[];
$this->tasks->test[];
$this->showPanel[];
7public $tasks;
$this->tasks = new tasks[];
$this->tasks->test[];
$this->showPanel[];
8Ví dụ trên sẽ xuất ra:
Ví dụ #15 Độ phân giải tên lớp:
Ghi chú:
Độ phân giải tên lớp sử dụng
8 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 đó.$tasks = new Tasks[$this]; $tasks->test[];
$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.0Ví dụ trên sẽ xuất ra:
Ví dụ #16 Thiếu độ phân giải tên lớpget_class[] on the object.
Kể từ Php 8.0.0, hằng số
8 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.$tasks = new Tasks[$this];
$tasks->test[];
$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.2
Ví dụ trên sẽ xuất ra:
Ví dụ #17 Độ phân giải tên đối tượng
Phương pháp và thuộc tính NULLSAFE$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.
4 then $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.
4 will be returned rather than an exception thrown. If the dereference is part of a chain, the rest of the chain is skipped.
Kể từ Php 8.0.0, các thuộc tính và phương thức cũng có thể được truy cập với toán tử "nullsafe" thay thế:
$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.3. Toán tử nullsafe hoạt động giống như quyền truy cập thuộc tính hoặc phương thức như trên, ngoại trừ nếu đối tượng bị bỏ rơi là
$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.4 thì
$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.4 sẽ được trả về thay vì ném ngoại lệ. Nếu độ phân giải là một phần của chuỗi, phần còn lại của chuỗi bị bỏ qua.is_null[] check first, but more compact.
Hiệu ứng tương tự như gói mỗi truy cập trong kiểm tra is_null [] trước tiên, nhưng nhỏ gọn hơn.
$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.6
Ví dụ #15 Độ phân giải tên lớp:
Ghi chú:
Độ phân giải tên lớp sử dụng
8 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 đó. ¶$tasks = new Tasks[$this];
$tasks->test[];
Ví dụ #16 Thiếu độ phân giải tên lớp
$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.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.8
$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.9
$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
$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 271
$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 272
$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
$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
Kể từ Php 8.0.0, hằng số
8 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. ¶$tasks = new Tasks[$this];
$tasks->test[];
Ví dụ #17 Độ phân giải tên đối tượ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 275
Phương pháp và thuộc tính NULLSAFE ¶
Kể từ Php 8.0.0, các thuộc tính và phương thức cũng có thể được truy cập với toán tử "nullsafe" thay thế: $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.
3. Toán tử nullsafe hoạt động giống như quyền truy cập thuộc tính hoặc phương thức như trên, ngoại trừ nếu đối tượng bị bỏ rơi là $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.
4 thì $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.
4 sẽ được trả về thay vì ném ngoại lệ. Nếu độ phân giải là một phần của chuỗi, phần còn lại của chuỗi bị bỏ qua.
$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 276
Hiệu ứng tương tự như gói mỗi truy cập trong kiểm tra is_null [] trước tiên, nhưng nhỏ gọn hơn. ¶
Ví dụ #18 Nhà điều hành Nullsafe
$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
$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 278
$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 279
object[ClassA]#1 [0] { } object[ClassB]#1 [0] { } object[ClassC]#1 [0] { } object[ClassD]#1 [0] { }0
object[ClassA]#1 [0] { } object[ClassB]#1 [0] { } object[ClassC]#1 [0] { } object[ClassD]#1 [0] { }1
object[ClassA]#1 [0] { } object[ClassB]#1 [0] { } object[ClassC]#1 [0] { } object[ClassD]#1 [0] { }2
object[ClassA]#1 [0] { } object[ClassB]#1 [0] { } object[ClassC]#1 [0] { } object[ClassD]#1 [0] { }3
Toán tử nullsafe được sử dụng tốt nhất khi NULL được coi là giá trị hợp lệ và có thể có cho một tài sản hoặc phương thức trả về. Để chỉ ra một lỗi, một ngoại lệ ném là thích hợp hơn. ¶
Aaron tại Thatone Dot Com ¶
object[ClassA]#1 [0] { } object[ClassB]#1 [0] { } object[ClassC]#1 [0] { } object[ClassD]#1 [0] { }4
14 năm trước ¶
Ví dụ #16 Thiếu độ phân giải tên lớp
object[ClassA]#1 [0] { } object[ClassB]#1 [0] { } object[ClassC]#1 [0] { } object[ClassD]#1 [0] { }5
object[ClassA]#1 [0] { } object[ClassB]#1 [0] { } object[ClassC]#1 [0] { } object[ClassD]#1 [0] { }6
object[ClassA]#1 [0] { } object[ClassB]#1 [0] { } object[ClassC]#1 [0] { } object[ClassD]#1 [0] { }7
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
class admin
{
function validate[]
{
if[!$_SESSION['level']==7]{
barMsg['YOU\'RE NOT ADMIN', 0];
return FALSE;
}else{
**public $tasks;** // The line causing the problem
$this->tasks = new tasks[]; // Get rid of $this->
$this->tasks->test[]; // Get rid of $this->
$this->showPanel[];
}
}
}
class tasks
{
function test[]
{
echo 'test';
}
}
$admin = new admin[];
$admin->validate[];
00 Kể từ Php 8.0.0, hằng số
8 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. ¶$tasks = new Tasks[$this];
$tasks->test[];
Ví dụ #17 Độ phân giải tên đối tượng
class admin
{
function validate[]
{
if[!$_SESSION['level']==7]{
barMsg['YOU\'RE NOT ADMIN', 0];
return FALSE;
}else{
**public $tasks;** // The line causing the problem
$this->tasks = new tasks[]; // Get rid of $this->
$this->tasks->test[]; // Get rid of $this->
$this->showPanel[];
}
}
}
class tasks
{
function test[]
{
echo 'test';
}
}
$admin = new admin[];
$admin->validate[];
01class admin
{
function validate[]
{
if[!$_SESSION['level']==7]{
barMsg['YOU\'RE NOT ADMIN', 0];
return FALSE;
}else{
**public $tasks;** // The line causing the problem
$this->tasks = new tasks[]; // Get rid of $this->
$this->tasks->test[]; // Get rid of $this->
$this->showPanel[];
}
}
}
class tasks
{
function test[]
{
echo 'test';
}
}
$admin = new admin[];
$admin->validate[];
02class admin
{
function validate[]
{
if[!$_SESSION['level']==7]{
barMsg['YOU\'RE NOT ADMIN', 0];
return FALSE;
}else{
**public $tasks;** // The line causing the problem
$this->tasks = new tasks[]; // Get rid of $this->
$this->tasks->test[]; // Get rid of $this->
$this->showPanel[];
}
}
}
class tasks
{
function test[]
{
echo 'test';
}
}
$admin = new admin[];
$admin->validate[];
03class admin
{
function validate[]
{
if[!$_SESSION['level']==7]{
barMsg['YOU\'RE NOT ADMIN', 0];
return FALSE;
}else{
**public $tasks;** // The line causing the problem
$this->tasks = new tasks[]; // Get rid of $this->
$this->tasks->test[]; // Get rid of $this->
$this->showPanel[];
}
}
}
class tasks
{
function test[]
{
echo 'test';
}
}
$admin = new admin[];
$admin->validate[];
04$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
Phương pháp và thuộc tính NULLSAFE ¶
Aaron tại Thatone Dot Com ¶
class admin
{
function validate[]
{
if[!$_SESSION['level']==7]{
barMsg['YOU\'RE NOT ADMIN', 0];
return FALSE;
}else{
**public $tasks;** // The line causing the problem
$this->tasks = new tasks[]; // Get rid of $this->
$this->tasks->test[]; // Get rid of $this->
$this->showPanel[];
}
}
}
class tasks
{
function test[]
{
echo 'test';
}
}
$admin = new admin[];
$admin->validate[];
0614 năm trước ¶
Pawel Dot Zimnowodzki tại Gmail Dot Com ¶
class admin
{
function validate[]
{
if[!$_SESSION['level']==7]{
barMsg['YOU\'RE NOT ADMIN', 0];
return FALSE;
}else{
**public $tasks;** // The line causing the problem
$this->tasks = new tasks[]; // Get rid of $this->
$this->tasks->test[]; // Get rid of $this->
$this->showPanel[];
}
}
}
class tasks
{
function test[]
{
echo 'test';
}
}
$admin = new admin[];
$admin->validate[];
07class admin
{
function validate[]
{
if[!$_SESSION['level']==7]{
barMsg['YOU\'RE NOT ADMIN', 0];
return FALSE;
}else{
**public $tasks;** // The line causing the problem
$this->tasks = new tasks[]; // Get rid of $this->
$this->tasks->test[]; // Get rid of $this->
$this->showPanel[];
}
}
}
class tasks
{
function test[]
{
echo 'test';
}
}
$admin = new admin[];
$admin->validate[];
08class admin
{
function validate[]
{
if[!$_SESSION['level']==7]{
barMsg['YOU\'RE NOT ADMIN', 0];
return FALSE;
}else{
**public $tasks;** // The line causing the problem
$this->tasks = new tasks[]; // Get rid of $this->
$this->tasks->test[]; // Get rid of $this->
$this->showPanel[];
}
}
}
class tasks
{
function test[]
{
echo 'test';
}
}
$admin = new admin[];
$admin->validate[];
09class admin
{
function validate[]
{
if[!$_SESSION['level']==7]{
barMsg['YOU\'RE NOT ADMIN', 0];
return FALSE;
}else{
**public $tasks;** // The line causing the problem
$this->tasks = new tasks[]; // Get rid of $this->
$this->tasks->test[]; // Get rid of $this->
$this->showPanel[];
}
}
}
class tasks
{
function test[]
{
echo 'test';
}
}
$admin = new admin[];
$admin->validate[];
10class admin
{
function validate[]
{
if[!$_SESSION['level']==7]{
barMsg['YOU\'RE NOT ADMIN', 0];
return FALSE;
}else{
**public $tasks;** // The line causing the problem
$this->tasks = new tasks[]; // Get rid of $this->
$this->tasks->test[]; // Get rid of $this->
$this->showPanel[];
}
}
}
class tasks
{
function test[]
{
echo 'test';
}
}
$admin = new admin[];
$admin->validate[];
11$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
4 tháng trước ¶
Ví dụ #17 Độ phân giải tên đối tượng
class admin
{
function validate[]
{
if[!$_SESSION['level']==7]{
barMsg['YOU\'RE NOT ADMIN', 0];
return FALSE;
}else{
**public $tasks;** // The line causing the problem
$this->tasks = new tasks[]; // Get rid of $this->
$this->tasks->test[]; // Get rid of $this->
$this->showPanel[];
}
}
}
class tasks
{
function test[]
{
echo 'test';
}
}
$admin = new admin[];
$admin->validate[];
13class admin
{
function validate[]
{
if[!$_SESSION['level']==7]{
barMsg['YOU\'RE NOT ADMIN', 0];
return FALSE;
}else{
**public $tasks;** // The line causing the problem
$this->tasks = new tasks[]; // Get rid of $this->
$this->tasks->test[]; // Get rid of $this->
$this->showPanel[];
}
}
}
class tasks
{
function test[]
{
echo 'test';
}
}
$admin = new admin[];
$admin->validate[];
14class admin
{
function validate[]
{
if[!$_SESSION['level']==7]{
barMsg['YOU\'RE NOT ADMIN', 0];
return FALSE;
}else{
**public $tasks;** // The line causing the problem
$this->tasks = new tasks[]; // Get rid of $this->
$this->tasks->test[]; // Get rid of $this->
$this->showPanel[];
}
}
}
class tasks
{
function test[]
{
echo 'test';
}
}
$admin = new admin[];
$admin->validate[];
15class admin
{
function validate[]
{
if[!$_SESSION['level']==7]{
barMsg['YOU\'RE NOT ADMIN', 0];
return FALSE;
}else{
**public $tasks;** // The line causing the problem
$this->tasks = new tasks[]; // Get rid of $this->
$this->tasks->test[]; // Get rid of $this->
$this->showPanel[];
}
}
}
class tasks
{
function test[]
{
echo 'test';
}
}
$admin = new admin[];
$admin->validate[];
16Phương pháp và thuộc tính NULLSAFE ¶
Ví dụ #17 Độ phân giải tên đối tượng
class admin
{
function validate[]
{
if[!$_SESSION['level']==7]{
barMsg['YOU\'RE NOT ADMIN', 0];
return FALSE;
}else{
**public $tasks;** // The line causing the problem
$this->tasks = new tasks[]; // Get rid of $this->
$this->tasks->test[]; // Get rid of $this->
$this->showPanel[];
}
}
}
class tasks
{
function test[]
{
echo 'test';
}
}
$admin = new admin[];
$admin->validate[];
17class admin
{
function validate[]
{
if[!$_SESSION['level']==7]{
barMsg['YOU\'RE NOT ADMIN', 0];
return FALSE;
}else{
**public $tasks;** // The line causing the problem
$this->tasks = new tasks[]; // Get rid of $this->
$this->tasks->test[]; // Get rid of $this->
$this->showPanel[];
}
}
}
class tasks
{
function test[]
{
echo 'test';
}
}
$admin = new admin[];
$admin->validate[];
18class admin
{
function validate[]
{
if[!$_SESSION['level']==7]{
barMsg['YOU\'RE NOT ADMIN', 0];
return FALSE;
}else{
**public $tasks;** // The line causing the problem
$this->tasks = new tasks[]; // Get rid of $this->
$this->tasks->test[]; // Get rid of $this->
$this->showPanel[];
}
}
}
class tasks
{
function test[]
{
echo 'test';
}
}
$admin = new admin[];
$admin->validate[];
19class admin
{
function validate[]
{
if[!$_SESSION['level']==7]{
barMsg['YOU\'RE NOT ADMIN', 0];
return FALSE;
}else{
**public $tasks;** // The line causing the problem
$this->tasks = new tasks[]; // Get rid of $this->
$this->tasks->test[]; // Get rid of $this->
$this->showPanel[];
}
}
}
class tasks
{
function test[]
{
echo 'test';
}
}
$admin = new admin[];
$admin->validate[];
20class admin
{
function validate[]
{
if[!$_SESSION['level']==7]{
barMsg['YOU\'RE NOT ADMIN', 0];
return FALSE;
}else{
**public $tasks;** // The line causing the problem
$this->tasks = new tasks[]; // Get rid of $this->
$this->tasks->test[]; // Get rid of $this->
$this->showPanel[];
}
}
}
class tasks
{
function test[]
{
echo 'test';
}
}
$admin = new admin[];
$admin->validate[];
21Phương pháp và thuộc tính NULLSAFE ¶
Kể từ Php 8.0.0, các thuộc tính và phương thức cũng có thể được truy cập với toán tử "nullsafe" thay thế: $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.
3. Toán tử nullsafe hoạt động giống như quyền truy cập thuộc tính hoặc phương thức như trên, ngoại trừ nếu đối tượng bị bỏ rơi là $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.
4 thì $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.
4 sẽ được trả về thay vì ném ngoại lệ. Nếu độ phân giải là một phần của chuỗi, phần còn lại của chuỗi bị bỏ qua.
class admin
{
function validate[]
{
if[!$_SESSION['level']==7]{
barMsg['YOU\'RE NOT ADMIN', 0];
return FALSE;
}else{
**public $tasks;** // The line causing the problem
$this->tasks = new tasks[]; // Get rid of $this->
$this->tasks->test[]; // Get rid of $this->
$this->showPanel[];
}
}
}
class tasks
{
function test[]
{
echo 'test';
}
}
$admin = new admin[];
$admin->validate[];
22class admin
{
function validate[]
{
if[!$_SESSION['level']==7]{
barMsg['YOU\'RE NOT ADMIN', 0];
return FALSE;
}else{
**public $tasks;** // The line causing the problem
$this->tasks = new tasks[]; // Get rid of $this->
$this->tasks->test[]; // Get rid of $this->
$this->showPanel[];
}
}
}
class tasks
{
function test[]
{
echo 'test';
}
}
$admin = new admin[];
$admin->validate[];
23class admin
{
function validate[]
{
if[!$_SESSION['level']==7]{
barMsg['YOU\'RE NOT ADMIN', 0];
return FALSE;
}else{
**public $tasks;** // The line causing the problem
$this->tasks = new tasks[]; // Get rid of $this->
$this->tasks->test[]; // Get rid of $this->
$this->showPanel[];
}
}
}
class tasks
{
function test[]
{
echo 'test';
}
}
$admin = new admin[];
$admin->validate[];
24$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
Hiệu ứng tương tự như gói mỗi truy cập trong kiểm tra is_null [] trước tiên, nhưng nhỏ gọn hơn. ¶
Ví dụ #18 Nhà điều hành Nullsafe
class admin
{
function validate[]
{
if[!$_SESSION['level']==7]{
barMsg['YOU\'RE NOT ADMIN', 0];
return FALSE;
}else{
**public $tasks;** // The line causing the problem
$this->tasks = new tasks[]; // Get rid of $this->
$this->tasks->test[]; // Get rid of $this->
$this->showPanel[];
}
}
}
class tasks
{
function test[]
{
echo 'test';
}
}
$admin = new admin[];
$admin->validate[];
26class admin
{
function validate[]
{
if[!$_SESSION['level']==7]{
barMsg['YOU\'RE NOT ADMIN', 0];
return FALSE;
}else{
**public $tasks;** // The line causing the problem
$this->tasks = new tasks[]; // Get rid of $this->
$this->tasks->test[]; // Get rid of $this->
$this->showPanel[];
}
}
}
class tasks
{
function test[]
{
echo 'test';
}
}
$admin = new admin[];
$admin->validate[];
27class admin
{
function validate[]
{
if[!$_SESSION['level']==7]{
barMsg['YOU\'RE NOT ADMIN', 0];
return FALSE;
}else{
**public $tasks;** // The line causing the problem
$this->tasks = new tasks[]; // Get rid of $this->
$this->tasks->test[]; // Get rid of $this->
$this->showPanel[];
}
}
}
class tasks
{
function test[]
{
echo 'test';
}
}
$admin = new admin[];
$admin->validate[];
20class admin
{
function validate[]
{
if[!$_SESSION['level']==7]{
barMsg['YOU\'RE NOT ADMIN', 0];
return FALSE;
}else{
**public $tasks;** // The line causing the problem
$this->tasks = new tasks[]; // Get rid of $this->
$this->tasks->test[]; // Get rid of $this->
$this->showPanel[];
}
}
}
class tasks
{
function test[]
{
echo 'test';
}
}
$admin = new admin[];
$admin->validate[];
29