类的定义
每个类的定义都以关键字 class 开头,后面跟着类名,后面跟着一对花括号,里面包含有类的属性与方法的定义
一个类可以包含有属于自己的常量,变量(属性)以及函数(方法)
当一个方法或属性在类定义内部被调用时,有一个可用的伪变量 $this
面向对象的基本原则:高内聚,低耦合
class SimpleClass {
//声明属性
public $var = 'var is a default value';
//声明方法
public function displayVar()
{
echo $this->var;
}
}
类的实例化
要创建一个类的实例,必须使用 new 关键字。当创建新对象时该对象总是被赋值,除非该对象定义了构造函数并且在出错时抛出了一个异常。类应在被实例化之前定义(某些情况下则必须这样)。
如果在 new 之后跟着的是一个包含有类名的字符串 string,则该类的一个实例被创建。如果该类属于一个命名空间,则必须使用其完整名称
在类定义内部,可以用 new self 和 new parent 创建新对象
当把一个对象已经创建的实例赋给一个新变量时,新变量会访问同一个实例,就和用该对象赋值一样。此行为和给函数传递入实例时一样。
可以用克隆给一个已创建的对象建立一个新实例
instanceof 用于确定一个 PHP 变量是否属于某一类 class 的实例,instanceof 也可用来确定一个变量是不是继承自某一父类的子类的实例
$instance = new SimpleClass();
class GrandParent{
}
class ParentClass extends GrandParent{
}
class MyClass extends ParentClass{
}
$a = new MyClass;
var_dump($a instanceof MyClass);//true
var_dump($a instanceof ParentClass);//true
var_dump($a instanceof GrandParent);//true
继承
一个类可以在声明中用 extends 关键字继承另一个类的方法和属性。PHP不支持多重继承,一个类只能继承一个基类
被继承的方法和属性可以通过用同样的名字重新声明被覆盖。但是如果父类定义方法时使用了 final,则该方法不可被覆盖。可以通过 parent:: 来访问被覆盖的方法或属性
当覆盖方法时,参数必须保持一致否则 PHP 将发出 E_STRICT 级别的错误信息。但构造函数例外,构造函数可在被覆盖时使用不同的参数
::class
自 PHP 5.5 起,关键词 class 也可用于类名的解析。使用 ClassName::class 你可以获取一个字符串,包含了类 ClassName 的完全限定名称。这对使用了 命名空间 的类尤其有用
namespace app;
class SimpleClass {
}
echo SimpleClass::class;//打印出 app\SimpleClass
属性
类的变量成员叫做属性,属性声明是由关键字 public,protected 或者 private 开头,然后跟一个普通的变量声明来组成,属性中的变量可以初始化,但是初始化的值必须是常数
在类的成员方法里面,可以用 ->(对象运算符): t h i s − > p r o p e r t y ( 其 中 p r o p e r t y 是 该 属