继承和抽象类思想

访问修饰符

  public:公共的,共有的,公开的(可以在“任何位置”使用)

  protected:受保护的(可以在当前类或继承关系中使用)

  private:私有的(只能在其所在的类中访问)

父类关键词

  parent代表父类

父类的使用

   parent::__construct($p1);//调用父类的构造函数来初始化p1

继承关键字

   class 子类 extends 父类 {}

构造方法析构方法在继承中的表现

  子类中没有定义构造方法时,会自动调用父类的构造方法

  可以手动调用 parent::__construct($p1)

优点:节约代码

重写关键字:override

例子

class C{

       function show1($para1){

              echo "<br />父类的show1方法:para1 = " . $para1;

       }

}

class D extends C{

       function show1($para, $para2){//参数不一致

              echo "<br />子类的show1方法";

       }

}

 

重写的基本要求

访问权限

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

方法的参数形式

应该跟父类的一致。

最终类关键字final class(最终方法:final method)

用途:不希望对其进行扩展

书写形式:final  class  类名{ }

工厂模式

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的一个对象

 

优点:只需要指定对象就可以创建

单例模式设计

某个类,只允许其“创建”出一个对象,即使去进行多次创建,也只能得到一个对象。

单例模式的关键点

  1. 设置私有属性
  2. 设置私有构造方法
  3. 设置执行方法
  4. 设置私有拷贝方法

抽象类

关键字:abstract

作用:用于做父类,规范类,不需要实例化

抽象类方法

抽象方法是一个没有方法体(也不含大括号)的方法定义“头”而已

即相当于要求下级类去完成该功能(动作),但自己是不做的

重载方法

在一个类中,有多个同名的方法,每个方法的参数不同而已。这种现象就称为“重载”

参数不同可以是:数量个数不同,或类型不同,或顺序不同

例子

class  A{

int  function  f1(int  x){......}

int  function  f1(int  x,  int  y){.....}

int  function  f1(string s   int  m){....}

}

在PHP中重载只是一个概念

属性重载

所谓属性重载,就是在面对上述4种情形的属性使用场景中,该对象如果来“应对”的问题。

如果某属性不存在,但在语法中使用如下情形,则会发生:

取值:$v1 = 对象->属性;                     ===>自动调用类中的__get()方法

赋值:对象->属性 = XX值;                 ===>自动调用类中的__set()方法

判断是否存在:isset(对象->属性;)       ===>自动调用类中的__isset()方法

销毁:unset(对象->属性;)                       ===>自动调用类中的__unset()方法

 

方法重载

关键字:__call

例子:

Function f1(){

         Echo :”f1被调用”

}

Function f2($x,$y){

         Echo :”f2被调用”;

         Return $x+$y;

}

Class a{

         Public $p1=1;

         Function __call($x,$arr){

                   $c=count($array);

                   If($c==0){

                            F1();

}else if(){

         Return f2($arr[0],$arr[1]);

}

}

}

$d=new a();

$d->f1();

$v1=$d->f1(1,2)//f1不存在两个参数

echo "<br />d1里面的p1=" . $d1->p1;

echo "<br />结果v1=" . $v1;

执行结果
f1被调用
f1被调用

o1里面的p1=1
结果v1=3

转载于:https://www.cnblogs.com/diverman/p/8515454.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值