## **class**
每个类的定义都以关键字`class`开头,后面跟着类名,后面跟着一对花括号,里面包含有类的属性与方法的定义。
类名可以是任何非 PHP[保留字](https://www.php.net/manual/zh/reserved.php)的合法标签。一个合法类名以字母或下划线开头,后面跟着若干字母,数字或下划线。以正则表达式表示为:`[a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*`。
一个类可以包含有属于自己的[常量](https://www.php.net/manual/zh/language.oop5.constants.php),[变量](https://www.php.net/manual/zh/language.oop5.properties.php)(称为“属性”)以及函数(称为“方法”)。
## **new**
将类实例化成对象非常容易,只需要使用`new`关键字并在后面加上一个和类名同名的方法即可。当然如果在实例化对象时不需要为对象传递参数,在`new`关键字后面直接用类名称即可,不需要再加上括号。
~~~
变量名 = new 类名(参数数列表);
或
变量名 = new 类名;
~~~
参数说明如下:
* 变量名:通过类所创建的一个对象的引用名称,可以通过这个名称来访问对象的成员;
* new:关键字,表明要创建一个新的对象;
* 类名:表示新对象的类型;
* 参数列表:指定类的构造方法用于初始化对象的值,如果类中没存定义构造函数,PHP 会自动创建一个不带参数的默认构造函数。
## **Properties and methods**
对象中包含成员属性和成员方法,访问对象中的成员和访问数组中的元素类似,只能通过对象的引用来访问对象中的成员。但还要使用一个特殊的运算符号`->`来完成对象成员的访问,访问对象中成员的语法格式如下所示:
~~~
变量名 = new 类名(参数); //实例化一个类
变量名 -> 成员属性 = 值; //为成员属性赋值
变量名 -> 成员属性; //直接获取成员属性的值
变量名 -> 成员方法(); //访问对象中的成员方法
~~~
## **extends**
一个类可以在声明中用`extends`关键字继承另一个类的方法和属性。PHP不支持多重继承,一个类只能继承一个基类。
被继承的方法和属性可以通过用同样的名字重新声明被覆盖。但是如果父类定义方法时使用了[final](https://www.php.net/manual/zh/language.oop5.final.php),则该方法不可被覆盖。可以通过[parent::](https://www.php.net/manual/zh/language.oop5.paamayim-nekudotayim.php)来访问被覆盖的方法或属性。
当覆盖方法时,参数必须保持一致否则 PHP 将发出**`E_STRICT`**级别的错误信息。但构造函数例外,构造函数可在被覆盖时使用不同的参数。
## **::class**
自 PHP 5.5 起,关键词`class`也可用于类名的解析。使用`ClassName::class`你可以获取一个字符串,包含了类`ClassName`的完全限定名称。