PHP 面向对象

面向对象三大特性:封装继承多态

官方文档:http://php.net/manual/zh/language.oop5.php

要创建一个类的实例,必须使用 new 关键字。如果该类属于一个名字空间,则必须使用其完整名称。

你可以使用 ClassName::class 获取一个字符串,包含了类 ClassName 的完全限定名称。

$this self parent static

当一个方法在类定义内部被调用时,有一个可用的伪变量 $this

使用 self:: 来访问静态方法和静态变量。

使用 static:: 来访问静态方法和静态变量。

使用 parent:: 来访问父类的方法和静态属性。

在类定义内部,可以用 new selfnew parent 创建新对象。

属性、方法、类常量

属性 中的变量可以初始化,但是初始化的值必须是常数,这里的常数是指 PHP 脚本在编译阶段时就可以得到其值,而不依赖于运行时的信息才能求值。

静态 static

  • 静态方法
  • 静态属性

访问控制

  • private
  • protected
  • public

魔术方法

构造函数、析构函数

  • __construct()
  • __destruct()

重载

  • __call()
  • __callStatic()
  • __get()
  • __set()
  • __isset()
  • __unset()

其他

  • __sleep() 常用于提交未提交的数据,或类似的清理操作。同时,如果有一些很大的对象,但不需要全部保存,这个功能就很好用。
  • __wakeup() 经常用在反序列化操作中,例如重新建立数据库连接,或执行其它初始化操作。
  • __toString() 方法用于一个类被当成字符串时应怎样回应,例如 echo $obj
  • __invoke() 当尝试以调用函数的方式调用一个对象时,此方法会被调用。例如 obj($arg)
  • __set_state() 当调用 var_export() 导出类时,此静态方法会被调用。
  • __clone()
  • __debugInfo() 对对象使用 var_dump() 时,该方法被调用。例如 var_dump(new MyClass(42));

多态

对象继承

一个类可以在声明中用 extends 关键字继承另一个类的方法和属性。

子类可以覆盖父类的属性或方法,当覆盖方法时,参数必须保持一致否则 PHP 将发出 E_STRICT 级别的错误信息。但构造函数例外,构造函数可在被覆盖时使用不同的参数。

final 禁止继承

如果父类中的方法被声明为 final,则子类无法覆盖该方法。如果一个类被声明为 final,则不能被继承。

用于 方法 前。

抽象类 abstract

抽象类中的抽象方法不能有具体实现。

抽象类中的普通方法有具体的实现。

抽象类不能被实例化。用于被其他类继承,子类必须定义抽象类中所有的抽象方法。

接口 interface

接口中的方法不能有具体实现。

接口中的方法必须公有。

实现接口

implements

实现接口的类必须实现接口中定义的 所有 方法。

一个类可以实现多个接口,使用逗号分隔。

接口也可以继承接口 extends。接口可以继承多个接口。

接口常量不能被覆盖。

多继承 trait

一个类使用多个 trait

使用 use,并用逗号分隔。

class MyClass {
  use Hello, World;

  public function ...
}

对象比较

类型约束

后期静态绑定

对象和引用

对象序列化

对象复制

PHP 7 新特性

匿名类

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏九彩拼盘的叨叨叨

JS模式 之通用模式(译)

原文 http://shichuan.github.io/javascript-patterns/

11230
来自专栏风中追风

==和equals的区别

==比较的是内存地址,equals方法在object里源代码也是用==来比较,比较的也是内存地址;

32870
来自专栏领域驱动设计DDD实战进阶

04-TypeScript中的方法新功能(上)

在TypeScript中,提供了一些函数的新功能,能够简化JavaScript中的一些比较复杂代码才能实现的一些能力。 在C#后端语言中,能够对方法传递的参数指...

28540
来自专栏大闲人柴毛毛

Redis源码分析(四)——Redis数据结构-整数集合

1. 整数集合特点 有序:集合中所有值按照从小到大顺序排列。 不重复 可以存储int16_t、int32_t、int64_t三种类型的整数 1. 数据结构 t...

39870
来自专栏大闲人柴毛毛

Java基础深入解析——类与对象

成员变量与局部变量的区别 1.成员变量定义在类中,整个类中都能够访问。   局部变量定义在局部代码块中,只能在局部代码块中访问。 2.成员变量存在于堆内存中,有...

33770
来自专栏人工智能LeadAI

Python中defaultdict用法

defaultdict类的初始化函数接受一个类型作为参数,当所访问的键不存在的时候,可以实例化一个值作为默认值

11340
来自专栏C/C++基础

C++模板之隐式实例化、显示实例化、隐式调用、显示调用和模板特化详解

模板的实例化指函数模板(类模板)生成模板函数(模板类)的过程。对于函数模板而言,模板实例化之后,会生成一个真正的函数。而类模板经过实例化之后,只是完成了类的定义...

19920
来自专栏从零开始学 Web 前端

*(int*)&p

分析: void(p)(); 这行代码定义了一个指针变量p,p指向一个函数。这个函数的参数和返回值都为void。 &p是求指针变量p本身的地址。 ...

60720
来自专栏我是业余自学C/C++的

redis_3.0.7_sds.c_sdsIncrLen()

12520
来自专栏武军超python专栏

2018-7-18pythoh中函数的参数,返回值,变量,和递归

********************************************************************************...

14940

扫码关注云+社区

领取腾讯云代金券