Static methods in PHP can access non-static methods. By instantiating an object, you can call non-static methods in the object; although static methods can call non-static methods, they cannot call constructors.
The operating environment of this article: Windows 10 system, PHP version 7.1, Dell G3 computer.
What happens if we call non-static methods? Do the test first.
Execute the following, and the error returned is as follows:
Fatal error: Non-static method test::test() cannot be called statically in /home/×××/test.php on line 7 Call Stack: 0.0002 332548 1. {main}() /home/×××/test.php:0
At this time, you may think that calling non-static methods statically will not work, but in fact, it is too early to draw the conclusion. Because the test() method is special, it has the same name as the class and is a constructor method. We continue testing.
Execution result:
it works too
This shows thatstatically calling non-static methods is feasible, but statically calling constructors is not. In order to verify this conclusion, I did the following test:
The execution results are as follows:
Fatal error: Constructor test::test() cannot be static in /home/xxx/test.php on line 9
The constructor cannot be declared static, so the above inference is correct.
But this result is indeed very special, because maybe onlyPHP can statically call non-static methods. I did an experiment with Java. If the non-static method is statically called, the following error will be reported:
Cannot make a static reference to the non-static method showString() from the type HelloWorldApp
I have not tried other languages one by one, but this is enough to illustrate the special features of PHP. I have not found any relevant explanations about why PHP has such a situation.
Recommended learning: "PHP Video Tutorial"
The above is the detailed content of Can static methods in php access non-static methods?. For more information, please follow other related articles on the PHP Chinese website!