PHP 的oop思想

优点:

1.方便代码维护,更人性化

2.方便代码扩展

3.

语法:

class 类名

{

  修饰词 属性名;

  修饰词 function 方法名("参数"(看情况而定可以不用传参))

  {

    内容;

  }

}

//实例化类

$object = new 类名;

$object->方法名("参数"(看你封装的方法是否有传参));

关键字:

final:子类无法重写被修饰的方法;

static:静态;被它修饰的属性可以直接使用,不用实例化类,eg:$user=Person::$name;(类中有一个static $name='张三';)有两种调用方式1."::",2."self"

__get():获取属性值;

__set():给属性赋值;

TYPE_CREDITCARD:常量,一旦定义之后值不会再改变;

extends:继承,子类可以直接使用父类的方法,优先级,子类高于父类,如果子类和父类的方法名相同,引用类的属性的时候回返回子类的属性值,方法也是

parent::父类被重写的方法,不能用"父类类名::被重写的方法";

self::method("方法名")();调用的是子类的方法();

interface:接口

implements 接口名,接口名...;实现继承多个接口

语法:

interface 名称

{

  function 方法名();

}

注意:这里没有属性和方法体

trait : 可以将多个类中,共用的一些属性和方法提取出来做来公共trait类,就像是装配汽车的配件,如果你的类中要用到这些配件,就直接用use导入就可以了,相当于把trait中的代码复制到当前类中.
因为trait不是类,所以不能有静态成员,类常量,当然也不可能被实例化。其实一个类中的代码,可以分为二大部分:一是我们自己写的代码,暂且叫私有代码吧,还有一部分就是公共代码了,

之前主要是由父类代码组成。现在你的类中的公共代码又多一个新成员:trait类代码。如果说:继承可以纵向扩展一个类,那么trait就是横向扩展一个类功能

eg:


<?php

trait Test1 {

public $name = 'PHP中文网'; //trait类中可以用属性

public function hello1() //trait类中主要成员是方法

{ return 'Test1::hello1()'; } } //2.创建triat类

Test2 trait Test2 { function hello2() { return 'Test2::hello2()'; } } //3.创建Demo1类

class Demo1 { use Test1, Test2; } //进行测试 $obj = new Demo1; echo $obj->hello1(); //访问trait类Test1中的

hello1() echo '<hr>'; echo $obj->name; //访问ttrait类

Test1中的$name属性 echo '<hr>'; echo $obj->hello2(); //访问ttrait类

Test1中的hello2()

注意:1.一个类中如果使用了多个trait回发生致命错误

  2.一个类中使用两个不同的trait中相同方法需要用as解决冲突

抽象类:

abstract关键字修饰,父类的抽象方法是只有方法名,没有方法体,子类必须实现父类抽象方法

注意:1.抽象方法只能在抽象类中,所以只有一个类中存在一个抽象方法就必须定义成抽象类

  2.抽象类不能直接实例化

构造函数:

__construct:初始化类属性的特殊函数

子类继承父类不会调用父类构造函数,需要在子类中显示调用:语法:父类名::__cunstruct();

析构函数:

__destruct():会在程序执行结束后调用

类检查:class_exists();

检查类是否在数组中:get_declared_classes()

得到类中属性和方法:get_calss_methods和get_class_vars

得到父类名称:get_parent_class()

判断方法是否存在:method_exists();

序列化:将一个对象转换成字节流,这样就可以将对象保存在文件中,这对于数据的持久化很有用

serialize():产生一个可存储的值的表示

注解:

返回字符串,此字符串包含了表示 value 的字节流,可以存储于任何地方。

这有利于存储或传递 PHP 的值,同时不丢失其类型和结构。

想要将已序列化的字符串变回 PHP 的值,可使用 unserialize()serialize() 可处理除了 resource 之外的任何类型。甚至可以 serialize() 那些包含了指向其自身引用的数组。你正 serialize() 的数组/对象中的引用也将被存储。

当序列化对象时,PHP 将试图在序列动作之前调用该对象的成员函数 __sleep()。这样就允许对象在被序列化之前做任何清除操作。类似的,当使用 unserialize() 恢复对象时, 将调用 __wakeup() 成员函数。

unserialize()

__sleep()在一个对象被序列化之前被调用,它能执行清理一些必要的清理工作,保持对象的状态 

posted @ 2018-04-11 15:51  magical宇  阅读(275)  评论(0编辑  收藏  举报