博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
10分钟学会php面相对象基础(Ⅴ)
阅读量:6540 次
发布时间:2019-06-24

本文共 2981 字,大约阅读时间需要 9 分钟。

继续前面的

abstract 抽象方法和抽象类;只有方法名称,没有方法体{},用abstract修饰; 只要类中有一个抽象方法,这个类就必须定义为抽象类;

abstract function fun1();

abstract 
function 
fun2();
abstract class person(){
  abstract function born();
}
 作为一个驾校毕业的杂技演员,9.1开学,继续往下填;
 
interface 接口 为了满足类似多重继承的需求,php提供接口;
  1. 接口与其他类,抽象类 没有太多的不同,只有一些特殊的点需要注意:
  2. 接口中不会存在有方法体的方法 fun();
  3. 接口中不支持给变量,只支持const 这样给常量;
  4. 接口不给传参;
  5. 接口不能实例化;
  6. 接口可以被一个抽象类或者普通类或者另一个接口继承;
  7. 接口如果要被普通类继承,要用implements 而不是 extends;
  8. 前面提到过,要想实例化,一个类中就不能存在任何一个抽象的方法或属性;
interface ml{  const pi='3.14';  function tuo();  function mo();}interface ml2 extends ml{  function tian();}class ml3 implements ml2{  function tuo(){}; function mo(){}; function tian(){};}

 

//继承多个接口需要主意,先继承抽象类或类,在实现接口;

class ml4 extends ml3 implemtents m1,m2;

后面以实例详细说明,接口的使用

待补:

 

多态的应用

三大特效封装、继承之后,再补多态;

对于面向对象的程序来说,多态就是把子类对象赋值给父类引用,然后调用父类的方法,去执行子类覆盖父类的那个方法,但在PHP里是弱类型的,对象引用都是一样的不分父类引用,还是子类引用。

这里的例子就照抄了,因为举得例子非常好。再举个类似的例子,car,都有一个加油的方法,有的加93,有的95,有的97;

interface shape{ function area(); function circumference(); const pi="3.14";}class rectangle implements shape{    var $width;    var $height;    function __construct($width,$height){         $this->height=$height;         $this->width=$width;    }    function area(){        $area = $this->height * $this->width;        return $area;    }    function circumference(){        $circumference = ($this->height + $this->width)*2;        return $circumference;    }    }class circle implements shape{    var $width;    var $height;    function __construct($r){         $this->r=$r;    }    function area(){        $area = shape::pi*(pow($this->r,2));        return $area;    }    function circumference(){        $circumference = 2*shape::pi*$this->r;        return $circumference;    }    }$retangle1 = new rectangle('2', '2');$circle1 = new circle('3');echo $retangle1->area();echo $retangle1->circumference();echo $circle1->area();echo $circle1->circumference();

 

serialize 和 unserialize串行化和解析

当需要将对象存储到数据库或进行网络传输时,需要将对象串行化,即转化为二进制编码。

用上面的代码继续写;

$retangle3 = new rectangle('2','2');$otos = serialize($retangle3);传输或存储$retangle4 = unserialize($otos);$retangle4->area();

 

__sleep() 和 __wakeup() 方法,用于 serialize前执行和在unserialize后马上执行的操作。

在PHP5中有两个魔术方法__sleep()方法和__wakeup()方法,在对象串行化的时候,会调用一个__sleep()方法来完成一 些睡前的事情;而在重新醒来,即由二进制串重新组成一个对象的时候,则会自动调用PHP的另一个函数__wakeup(),做一些对象醒来就要做的动作。

比如上面的例子中

class retangle implements shape{    var $width;    var $height;    function __construct($r){         $this->r=$r;    }    function area(){        $area = shape::pi*(pow($this->r,2));        return $area;    }    function circumference(){        $circumference = 2*shape::pi*$this->r;        return $circumference;    }    function __sleep(){      $arr = array($width);        return $arr;    }    function __wakeup(){      $this->xx = '10';    }}

这样,当实例化对象

$re = new circle('2','3');

$string1 = serialize($re); //转为字符串了,这时候拿去存库里

$p2 = unserialize($string1); //我从数据库李拿出来,然后让他再变成对象;

这时候,因为sleep,$re的height属性值没了;

var_dump($retangle2->height);    返回 null;

 

 

 

 
 

转载于:https://www.cnblogs.com/07byte/p/5827015.html

你可能感兴趣的文章
[Gradle] 在 Eclipse 下利用 gradle 构建系统
查看>>
JAVAWEB 一一 Hibernate(框架)
查看>>
与、或、异或、取反、左移和右移
查看>>
jQuery根据元素值删除数组元素的方法
查看>>
Linux基础学习(14)--日志管理
查看>>
vue常用的指令
查看>>
matlab练习程序(随机游走图像)
查看>>
Linux命令行下运行java.class文件
查看>>
input文本框实现宽度自适应代码实例
查看>>
C#基本数据类型 <思维导图>
查看>>
POJ3321 Apple Tree (树状数组)
查看>>
protocol buffers的编码原理
查看>>
行为型设计模式之命令模式(Command)
查看>>
减少死锁的几个常用方法
查看>>
HDFS 核心原理
查看>>
正确配置jstl的maven依赖,jar包冲突的问题终于解决啦
查看>>
利用KMP算法解决串的模式匹配问题(c++) -- 数据结构
查看>>
登录内网账号后,连接不上内网网址
查看>>
安装 MariaDB
查看>>
【deep learning学习笔记】注释yusugomori的DA代码 --- dA.h
查看>>