继承的时候跟java一样,继承下来的只能继承父类的public和protected属性和方法继承下来。
子类最多只能继承一个父类,如果想让子类C继承多个父类中的属性和方法,那么只能采用多层继承,即让B继承A,然后C再继承B,这样C中就有了A类和B类中的属性和方法。
比如:
class A{
public $a = 1;
}
class B extends A {
public $b =2;
}
class C extends B{
public $c =3;
function fn(){
echo $this->a;
}
}
$c = new C();
$c->fn();
如果我们要希望调用父类的 构造方法或者是其他的(public / protected)方法:
①类名::方法名()②parent::方法名()
例如:
class B {
public $b =2;
public function fn(){
echo "我是B类<br>";
}
}
class C extends B{
public $c =3;
function fn(){
echo "我是C类<br>";
B::fn();
}
}
$c = new C();
$c->fn();
介绍魔术方法:__call():
当定义的类中,调用没有存在的函数的时候,就会自动调用魔术方法__call
比如:
class C{
public $c =3;
public function test(){
echo "调用了魔术方法";
}
public function __call($name, $arguments)
{
if($name=="test1"){
$this->test();
}
// TODO: Implement __call() method.
}
}
$c = new C();
$c->test1();
在C类中,没有test1这个方法,因此调用了__call方法,如果调用的函数名为test1那么,就会自动调用test方法。
可以利用这个魔术方法来实现PHP中的重载功能。。。。(虽然听起来很滑稽(#滑稽脸))
意思就是:用一个不存在的函数名调用两个不同的函数。。。。(看起来更滑稽)
下面再来看几个魔术常量:
class C{
public $c =3;
public function test(){
echo "调用了魔术方法";
echo "<br>".__FILE__;
echo "<br>".__DIR__;
echo "<br>".__METHOD__;
}
public function __call($name, $arguments)
{
var_dump($arguments);
if($name=="test1"){
$this->test();
}
// TODO: Implement __call() method.
}
}
$c = new C();
$c->test1(2);