重写override

重写又叫覆盖,就是将从父类继承下来的属性或方法重新“定义”——就是从新写。

但注意:子类覆盖父类的方法,虽然可以去调用父类的同名方法去完成一定的工作,但不是必须的。也有可能父类的该方法所执行的结果并不适合子类,此时子类就去完全自己写了。

重写的基本要求:

访问控制权限

下级的访问控制权限应该不低于上级的访问控制权限:

上级:public  下级:只能public

上级:protected  下级: protected, public

上级:private   下级:private  protected  public——实际此情况无意义。

私有的不能覆盖,而是完全当作自己全新的。

方法的参数形式

应该跟父类的一致。

//重写
//class teacher{
// public $name = "张三";
// public $age = "20";
// public $subject = "语文";
// function intro(){
// echo "My".$this->name."age".$this->age;
// }
//}
//class student extends teacher{
// public $name = "李四";
// public $age = "25";
// public $sex = "男";
// function intro(){
// echo "My".$this->name."age".$this->age."sex".$this->sex;
// }

构造方法的重写问题:构造方法不但可以像其他普通方法一样重写,而且,比普通方法更宽松:重写的时候参数可以不一致。

最终类final class

通常,一个类,没有特别声明的话,则“别人”就可以随意拿过来使用并对之进行“扩展”——继承。

但是:

如果某个类不希望对其进行扩展,则可以将其声明为“最终类”。

形式:

final  class  类名{ 。。。。类定义。。。。}

最终方法final method

通常,一个方法,如果没有特别声明,则下级类就可以对其进行“覆盖”(重写)。

但是:

如果某个方法不希望被下级类覆盖,就可以对其生命为“最终方法”。

形式:

final  function  方法名(){。。。。方法定义。。。。}

//final,不能被继承、重写、调用
final class teacher{
public $name = "张三";
public $age = "20";
public $subject = "语文";
final function intro(){
echo "My".$this->name."age".$this->age;
}
}
class student extends teacher{
public $name = "李四";
public $age = "25";
public $sex = "男";
function intro(){
echo "My".$this->name."age".$this->age."sex".$this->sex;
}
}
$stu = new student();
$stu->intro();

工厂模式

在实际应用中,我们总是需要去实例化很多很多的类——以得到对象。

则:

我们可以设计出一个“工厂”(其实就是类),该工厂的作用(任务)就是为人们“生产”各种对象。这种工厂通常只要指定类名,就可以据此获取一个该类的对象。

class factory{

//Instance表示“实例”,“对象”

static function getInstance($className){

if(file_exists('./class/' . $className . ".class.php")){

$obj1 = new $className();

return $obj1;

}

else{

return null;//也可以die();

}

}

}

$obj1 = factory::getInstance("A");//获取类A的一个对象

$obj2 = factory::getInstance("B");//获取类B的一个对象

$obj3 = factory::getInstance("A");//再获取类A的一个对象

原文地址:https://www.cnblogs.com/loveMis/p/8514594.html