1、class
每个类的定义都以关键字 class开头,后面跟着类名,后面跟着一对花括号,里面包含有类的属性与方法的定义。
类名可以是任何非 PHP 保留字的合法标签。一个合法类名以字母或下划线开头,后面跟着若干字母,数字或下划线。不区分
一个类可以包含有属于自己的常量,变量(称为“属性”)以及函数(称为“方法”)。
- <?php
- class blogs
- {
- // 公共变量
- public $var = '付杰博客:www.fujieace.com' ;
- // 公共方法
- public function displayVar () {
- echo $this ->var ;
- }
- }
2、$this是谁?
当一个方法在类定义内部被调用时,有一个可用的伪变量 $this 。 $this 是一个到主叫对象的引用(通常是该方法所从属的对象);简单来说:谁new这个对象,$this就指的是谁;
- <?php
- class blogs
- {
- // 公共变量
- public $var = '付杰博客:www.fujieace.com' ;
- // 公共方法
- public function displayVar () {
- echo $this ->var ;
- }
- }
- class Welcome
- {
- public $var = '欢迎来到付杰博客!';
- public function displayVar(){
- echo $this->var;
- }
- }
- $a=new blogs();
- $a->displayVar();//付杰博客:www.fujieace.com
- $b=new Welcome();
- $b->displayVar();//欢迎来到付杰博客!
3、new
要创建一个类的实例,必须使用 new关键字。当创建新对象时该对象总是被赋值,除非该对象定义了构造函数并且在出错时抛出了一个异常。类应在被实例化之前定义;
- <?php
- class fujieace{
- function url(){
- echo 'www.fujieace.com';
- }
- }
- $blog=new fujieace();
- $blog->url();//www.fujieace.com
- //或者
- $classname='fujieace';
- $blogtwo=new $classname();
- $blogtwo->url();//www.fujieace.com
4、new self 和 new parent
在类定义内部,可以用 new self 和 new parent 创建新对象。
当把一个对象已经创建的实例赋给一个新变量时,新变量会访问同一个实例,就和用该对象赋值一样。此行为和给函数传递入实例时一样。可以用克隆给一个已创建的对象建立一个新实例。
- <?php
- class a{
- function aaa(){
- echo '这是一个父类a!';
- }
- }
- class b extends a{
- function bbb(){
- echo 'parent:实例化父类;它继续了父类a!';
- new parent;
- $this->aaa();//parent:实例化父类;它继续了父类a!这是一个父类a!
- }
- function bb(){
- echo 'self:实例化本身类';
- new self;
- $this->bbb();//self:实例化本身类parent:实例化父类;它继续了父类a!这是一个父类a!
- }
- }
- $obj=new b();
- $obj->bbb();//parent:实例化父类;它继续了父类a!这是一个父类a!
- $obj->bb();//self:实例化本身类parent:实例化父类;它继续了父类a!这是一个父类a!
- /*切记:在类当中用new self 和 new parent 时,一定要注意,千万不要造成死循环!*/
5、extends
一个类可以在声明中用 extends关键字继承另一个类的方法和属性。PHP不支持多重继承,一个类只能继承一个基类。
被继承的方法和属性可以通过用同样的名字重新声明被覆盖。但是如果父类定义方法时使用了 final,则该方法不可被覆盖。可以通过 parent::来访问被覆盖的方法或属性。
当覆盖方法时,参数必须保持一致否则 PHP 将发出 E_STRICT 级别的错误信息。但构造函数例外,构造函数可在被覆盖时使用不同的参数。
- <?php
- class SimpleClass{
- function displayVar(){
- echo '付杰博客:www.fujieace.com';
- }
- }
- class ExtendClass extends SimpleClass
- {
- function displayVar ()
- {
- echo "我的品牌:" ;
- parent :: displayVar ();
- }
- }
- $extended = new ExtendClass ();
- $extended -> displayVar ();//我的品牌:付杰博客:www.fujieace.com
6、::class
自 PHP 5.5 起,关键词 class 也可用于类名的解析。使用 ClassName::class 你可以获取一个字符串,包含了类 ClassName 的完全限定名称。这对使用了 命名空间 的类尤其有用。
- <?php
- namespace NS {
- class ClassName {
- }
- echo ClassName ::class;//NS\ClassName
- }