说到类, 大家很容易就想起了面向对象编程 (OOP). 其实面向对象编程是一种思想, 最为重要的一个特性就是封装性. 你不需要熟悉类和类方法是如何实现的, 只需要知道怎么使用即可, 这样大大增加了编程效率

本篇文章建立在有 Swift 编程基础的情况下, 所以并不会给出非常详细的实例. 没有能力的可以去学习一下《Swift 第八课 : 类》

1. 类的声明

<?php

    class 类名 {

        attribution of class

    }

?>

本人不推荐在声明的时候, 直接添加修饰符, 修饰符应该添加在每个成员属性或者方法的前面

2. 修饰符

private : 类成员属性和方法即使在被继承的时候, 也不可以访问, 属于该类私有

protected : 类的成员属性和方法在继承的时候, 可以被访问. 但是无法在外部 (实例化) 进行访问

public : 类的成员属性和方法在外部和继承的时候, 都可以直接被访问

3. 成员属性

<?php

    class example {

        public : $attribution;

    }

?>

4. 成员方法

<?php

    class example {

        protected function func() {

            //方法

        }

    }

?>

5. 类的实例化

实例化就是将一个变量声明为对象 (类), 方便后续进行操作

<?php

    class example {

        public $name;

        public function func() {

            //方法

        }

    }

$object = new example();    #类的实例化

$object->name = "hello";    #访问类成员属性

$object->func();    #访问类的方法

?>

6. $this

$this 主要用于对象内部成员之间的访问, 在访问内部成员的时候, 不需要在变量前面加 "$"

<?php

    class example {

        protected $name;

        function setName($name) {

            $this->name = $name;

        }

    }

?>

7. static 关键字

static 通常用于在类被实例化之后, 就不再改变的变量中. 静态成员不可以用 "->""$this" 的方式直接访问, 但是可以通过 self 或者 "::" 操作符访问

<?php

    class example {

        public static $number = 1;

        public function getNumber() {

            return self::$number;

        }

    }

echo example::$number; #结果 : 1

?>

除了 static 关键字声明的变量, 类中的常量也是需要通过 self"::" 访问

8. 构造方法和析构方法

构造方法也就是构造函数, 通常用于类的实例化中给一些变量赋与初始值

一般的格式都为 :

<?php

    public function __construct([mixed args]) {

        statement

    }

?>

其中 mixed args 是指变量

在实例化的过程中, 这个方法会直接被调用, 不需要额外写出函数名称

析构方法也就是析构函数, 他会在一些对象被销毁的时候, 执行清理任务

<?php

    public function __destruct() {

        statement

    }

?>

通常, 在 PHP 程序结束的时候, PHP 会自动销毁所有的变量, 这个时候析构方法就会被自动调用

这个在 Swift 关于类的课程中的实例已经非常详细, 这里不再给出实例. 虽然属于不同的语言, 关键字也有所不同, 但是在输出上, 大体是相同的

9. 类的继承

PHP 中使用 extends 关键字来实现类的继承

<php

    class A extents B {

        attribution

    }

?>

在继承的过程中, protectedpublic 的成员会被继承

如果要访问父类的静态属性和方法, 可以通过 "parent::静态属性" 进行访问

另外, 如果你不想父类的某个方法在继承的过程中被重写, 可以添加 final 关键字

<?php

    public final function sum($a, $b) {

        return $a + $b;

    }

?>

如果子类尝试去重写带有 final 关键字的父类的中的方法, 就会直接报错

10. 抽象类

抽象类就像是对类的一个规定, 规定你写的类里面要有哪些方法. 因此, 抽象类不能被实例化

通过在类名前面添加 abstract 关键字可以声明一个抽象类, 同样也可以通过在方法前面添加 abstract 关键字来声明抽象方法. 不过, 抽象方法后面必须有分号, 这有点类似于 C++ 中的函数声明

抽象类在继承的过程中, 只能作为父类

<?php

    abstract class example {

        abstract public function func();

    }

?>

在继承的过程中, 必须出现一个名叫 func() 的方法