面向对象

公开(public)

保护(protected)

protected $var;

protected function actionName() {}

protected 方法只能类的内部使用或继承使用-被多重继承也可用使用.

<?php
class a
{
    protected function a2()
    {
        echo 'this is protected';
    }
}
class b extends a
{

}

class c extends b
{
    public function c1()
    {
        $this->a2();
    }
}

$a = new c();
$a->c1();

私有(private)

封装

继承

继承重写方法

private在我们常识中是无法被继承的,子类拿不到,但其访问级别已是最高,所以你在子类中可以写成private protected public 仿佛是我们自己重新定义了一个函数一样,这点在5.2版本之前尤其突出,因为5.2之前的版本在继承重写父类方法是可以不保持参数个数相同,但5.3以后加强了这方面的限制,参数个数必须与父类相同

如果继承之后的参数需要多于父类的参数个数怎么办?

方法一: 使用属性

<?php

class a
{
    public function a1($a, $b)
    {
        echo 'a1';
    }
}

class b extends a
{
    public $b = 'master';

    public function a1($a, $b)
    {

        echo $this->b;
    }
}

$obj = new b();
$obj->b = 'abc';
$obj->a1(1, 2);

方法二:使用 func_get_arg

函数参数-0开始偏移

<?php

class a
{
    public function a1($a, $b)
    {
        echo 'a1';
    }
}

class b extends a
{
    public function a1($a, $b)
    {
        $c = func_get_arg(2);
        echo $c;
    }
}

$obj = new b();
$obj->a1(1, 2, 3);

相关资料

PHP类方法重写原则

results matching ""

    No results matching ""