摘要訊息 : 學習 PHP 中的類別.
0. 前言
本文于 2022 年 3 月 18 日进行一次更新和修正. 修正之后本文已经归档, 不再享受更新.
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 set_name($name) {
$this->name = $name;
}
}
?>
7. static
关键字
static
通常用于在类被实例化之后, 就不再改变的变量中. 静态成员不可以用 "->
" 和 "$this
" 的方式直接访问, 但是可以通过 self
或者 "::
" 操作符访问 :
<?php
class example {
public static $number = 1;
public function get_number() {
return self::$number;
}
}
echo example::$number; // 结果 : 1
?>
除了 static
关键字声明的变量, 类中的常量也是需要通过 self
和 "::
" 访问.
8. 构造方法和析构方法
构造方法也就是构造函数, 通常用于类的实例化中给一些变量赋与初始值, 一般的格式都为 :
<?php
public function __construct(參數列表) {
statement
}
?>
在实例化的过程中, 这个方法会直接被调用, 不需要额外写出函数名称.
析构方法也就是析构函数, 他会在一些对象被销毁的时候, 执行清理任务 :
<?php
public function __destruct() {
statement
}
?>
通常, 在 PHP 程序结束的时候, PHP 会自动销毁所有的变量, 这个时候析构方法就会被自动调用.
这个在 Swift 关于类的课程中的实例已经非常详细, 这里不再给出实例. 虽然属于不同的语言, 关键字也有所不同, 但是在输出上, 大体是相同的.
9. 类的继承
PHP 中使用 extends
关键字来实现类的继承 :
<php
class A extents B {
attribution
}
?>
在继承的过程中, protected
和 public
的成员会被继承. 如果要访问父类的静态属性和方法, 可以通过 "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
的方法.
自創文章, 原著 : Jonny. 如若閣下需要轉發, 在已經授權的情況下請註明本文出處 :