2.2PHP类型之类(Class)

1.类定义

1.1类声明

class 类名 {
    //类体
}

1.2抽象类

抽象类支持直接被继承,如果子类未实现父抽象类的所有抽象方法,则子类也必须为抽象类,如果子类实现了父抽象类的所有抽象方法,则子类为具体类。

抽象类不支持直接被实例化。

抽象类非必须包含抽象方法,但包含抽象方法的类必须为抽象类。

方法签名参考“方法覆盖”章节。

abstract class A {
    abstract function 方法名($形参名);
}

class B extends A {
    function 方法名($形参名) {
        //方法体
    }
}

1.3static关键字

static 关键字指向当前类。

1.4::class

::class 返回类的完全限定名称。

<?php

namespace App\Controllers;

class ArticleController {
}

echo ArticleController::class;

?>

//输出
App\Controllers\ArticleController

2.成员定义

注意:PHP 语言不支持静态访问器属性。

class 类名 {
    //静态字段
    static $a = 1;
  
    //静态方法
    static function f1() {
    }

    //类常量
    const B = 1;

    //实例字段
    $c = 1 {
        //实例getter
        get {
        }

        //实例settter
        set($形参名) {
        }
    }

    //实例方法
    function f2() {
    }

    //构造方法
    function __construct($c) {
        $this->c = $c;
    }
}

3.继承

3.1方法继承

一个子类只可以直接继承自一个父类,不可以直接继承自多个父类。

子类会直接继承父类中可继承的方法,间接继承祖父类中可继承的方法,以此类推,直至没有可继承的方法。

注意:从父类中继承过来的方法无需在子类中重新声明,否则会发生覆盖。

class 子类名 extends 父类名 {
    //子类体
}

3.2方法覆盖(Override)

如果从父类中继承过来的方法在子类中重新声明,则在子类中重新声明的方法会覆盖从父类中继承过来的方法。

方法签名包含:访问修饰符、方法名、形参类型、形参类型的个数、形参类型的顺序、返回类型。

注意:覆盖并不会影响父类中原来的方法。

class A {
    function f() {
        return 1;
    }
}

class B extends A {
    function f() {
        return 2;
    }
}

echo new B()->f();  // 2

4.创建对象

4.1创建对象

//无实参
$对象名 = new 类名();

//有实参
$对象名 = new 类名(实参);

4.2方法重载(Overload)

PHP 语言不支持方法重载。

4.3$this变量

$this 变量指向当前对象。

5.访问成员

//外部调用
类名::静态字段名
类名::类常量名
类名::静态方法名()
$对象名->实例字段名
$对象名->实例方法名()
//内部调用
//类上下文
static::静态字段名
static::类常量名
static::静态方法名()
//实例上下文
$this->实例字段名
$this->实例方法名()

原创文章,作者:huoxiaoqiang,如若转载,请注明出处:https://www.huoxiaoqiang.com/php/phplang/38152.html

(0)
huoxiaoqiang的头像huoxiaoqiang
上一篇 2025年7月1日 04:50
下一篇 6天前

相关推荐

发表回复

登录后才能评论