一些总结记录

接口

  1. 使用interface来定义,使用extend来实现接口
  2. 类中必须实现接口中定义的所有方法,否则会报一个致命错误。 类可以实现多个接口,用逗号来分隔多个接口的名称。
  3. 接口中也可以定义常量。接口常量和类常量的使用完全相同, 在 PHP 8.1.0 之前 不能被子类或子接口所覆盖
<?php

// 声明一个'Template'接口
interface Template
{
    public function setVariable($name, $var);
    public function getHtml($template);
}

实现接口的时候,class 中的参数名称不必和接口完全一致。 然而, PHP 8.0 起语法开始支持命名参数, 也就是说调用方会依赖接口中参数的名称。 因此,强烈建议开发者的参数的命名,在类和接口中保持一致

抽象类

使用abstract class, PHP 有抽象类和抽象方法。定义为抽象的类不能被实例化。任何一个类,如果它里面至少有一个方法是被声明为抽象的,那么这个类就必须被声明为抽象的

<?php
abstract class AbstractClass
{
 // 强制要求子类定义这些方法
    abstract protected function getValue();
    abstract protected function prefixValue($prefix);

    // 普通方法(非抽象方法)
    public function printOut() {
        print $this->getValue() . "\n";
    }
}

静态关键字

声明类属性或方法为静态,就可以不实例化类而直接访问。可以在实例化的类对象中通过静态访问

class TestClass
{
    public static $my_static = 'foo';
}
$tmp = new TestClass;

$name = 'TestClass';
print $tmp::$my_static;
print TestClass::$my_static;
// print $name::$my_static;  这里通过变量来引用会报错

联合类型和类型别名

联合类型(Union types)

联合类型接受多个不同的类型,每个类型由 | 符号连接

类型别名 (Type aliases)

PHP 支持两种类型别名:mixed 和 iterable,分别对应 object|resource|array|string|float|int|bool|null 和 Traversable|array 的 联合类型

注意: PHP 不支持用户定义类型别名

Trait

Trait 是为类似 PHP 的单继承语言而准备的一种代码复用机制

<?php
//定义
trait PaypalTrait {
}

//使用,在类中调用
use PaypalTrait;

匿名类

用于创建一些简单的对象, 使用new class关键字

<?php
// 使用显性类
class Logger
{
    public function log($msg)
    {
        echo $msg;
    }
}
$util->setLogger(new Logger());
// 使用匿名类
$util->setLogger(new class {
    public function log($msg)
    {
        echo $msg;
    }
});

魔术方法

魔术方法是一种特殊的方法,当对对象执行某些操作时会执行,以 方法名以__ 开头
下面都是魔术方法

__construct() 、 __destruct() 、 __call() 、 __callStatic() 、 __get() 、 __set() 、 __isset() 、 __unset() 、 __sleep() 、 __wakeup() 、 __serialize() 、 __unserialize() 、 __toString() 、 __invoke() 、 __set_state() 、 __clone() 、 __debugInfo() 。

除了 __construct(), __destruct() ,和 __clone() 之外的所有魔术方法都 必须 声明为 public, 否则会发出 E_WARNING。

final关键字

final 关键字通过在定义方法和常量之前加上 final 来防止被子类覆盖。 如果一个类被声明为 final,则不能被继承。

对象的比较

  • == 同一个类的实例就可以,属性和属性值一样
  • ===, 同一个实例
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值