I don't understand the concept of calling a parent method in PHP. The parent method is not static, yet it is called statically - normally PHP would throw an error/warning.
Question is, is this a quirk from PHP, or is this how it should be in OOP?
Taking the example from php.net:
<?php
class A {
function example() {
echo "I am A::example() and provide basic functionality.<br />\n";
}
}
class B extends A {
function example() {
echo "I am B::example() and provide additional functionality.<br />\n";
parent::example();
}
}
$b = new B;
// This will call B::example(), which will in turn call A::example().
$b->example();
?>
http://php.net/manual/en/keyword.parent.php
In PHP 5, calling non-static methods statically generates an E_STRICT level warning.
http://php.net/manual/en/language.oop5.static.php
If you will look at the definition of static method you will see:
So we can take this argument as an excuse for PHP. By the way, in C++ it is done the same way.
But there are other languages, where it is done like you said. For example, in JAVA, the parent method called like super.printMethod();
, in C#, it is done like base.printMethod()
.
So in PHP it might be done for the parser simplicity, as they will need a specific edge case for such invocation parent->printMethod()
.
That notification means that you can't call a non-statically defined method as static, but the call you did inside the method is not a static call, but a call to the parent class.
So this call will throw the E_STRICT warning:
$b = new B;
$b::example();
but your example will not
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With