Php virtual method implementation: First create a PHP sample file; then pass "
Recommended: "PHP Video Tutorial"
Sharing of the implementation method of virtual functions in PHP5
Anyone who has studied C should know that there is a concept of virtual function in C. How to implement this virtual function in php5?
Please look at the following code:
The code is as follows:
<?php class A { public function x() { echo "A::x() was called.\n"; } public function y() { self::x(); echo "A::y() was called.\n"; } public function z() { $this->x(); echo "A::z() was called.\n"; } } class B extends A { public function x() { echo "B::x() was called.\n"; } } $b = new B(); $b->y(); echo "--\n"; $b->z(); ?>
In this example, A::y() calls A::x(), And B::x() covers A::x(), so when calling B::y(), should B::y() call A::x() or B::x()? In C, if A::x() is not defined as a virtual function, then B::y() (that is, A::y()) will call A::x(), and if A::x () is defined as a virtual function using the virtual keyword, then B::y() will call B::x().
However, in PHP5, the functionality of virtual functions is implemented by the self and $this keywords. If A::y() in the parent class calls A::x() using self::x(), then in the subclass no matter whether A::x() is overridden or not, A::y( ) all call A::x(); and if A::y() in the parent class calls A::x() using $this->x(), then if A::y() in the subclass ::x() is overridden by B::x(), A::y() will call B::x().
The running results of the above example are as follows:
A::x() was called. A::y() was called. -- B::x() was called. A::z() was called. virtual-function.php
The code is as follows:
<?php class ParentClass { static public function say( $str ) { static::do_print( $str ); } static public function do_print( $str ) { echo "<p>Parent says $str</p>"; } } class ChildClass extends ParentClass { static public function do_print( $str ) { echo "<p>Child says $str</p>"; } } class AnotherChildClass extends ParentClass { static public function do_print( $str ) { echo "<p>AnotherChild says $str</p>"; } } echo phpversion(); $a=new ChildClass(); $a->say( 'Hello' ); $b=new AnotherChildClass(); $b->say( 'Hello' );
The above is the detailed content of How to implement virtual method in php. For more information, please follow other related articles on the PHP Chinese website!