前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >PHP类与对象

PHP类与对象

原创
作者头像
码一
发布2022-06-03 14:07:27
1.6K0
发布2022-06-03 14:07:27
举报
文章被收录于专栏:码园

本文是复习所写,并不会涵盖一些基础知识点

PHP类继承.png
PHP类继承.png

基本概念

  1. 使用class关键字来定义类,使用new来创建类的实例
代码语言:php
复制
<?php
   
class Test
{
    public $attr = 1; // 公共属性
       
    public function foo()
    {
        echo $this->attr;
    }
}
   
// 方式一
$obj = new Test();
$obj->foo();
   
// 方式二
// 与可变函数类似,称为可变类吧
$className = 'Test';
$obj = new $className();
$obj->foo();
   
// 方式三 PHP8
function getClassName()
{
    return 'Test';
}
$obj = new (getClassName());
$obj = new (Test::class);

在类内部可以使用new selfnew parent创建新对象

将对象实例赋值给一个新变量时,新变量访问的是同一实例。要创建一个新实例必须使用克隆操作

  1. 类的属性和方法存在与不同的空间,所以同一个类的属性和方法可以使用同样的名称
  2. 使用extends实现类继承,PHP只支持单继承。
  3. ::class类名解析
代码语言:php
复制
<?php
namespace Demo
{
    class Test()
    {
           
    }
       
    // 方式一
    echo Test::class;
}
   
// 方式二 PHP8
$obj = new Test();
echo $obj::class; // 等同于 get_class()
  1. Nullsafe方法和属性 <sub>PHP 8</sub>

?->nullsafe操作符,对象引用解析为null时不抛出异常,而是返回null

属性

代码语言:php
复制
<?php
class Test
{
    // 访问控制符
    public $attr = 1;
    protected $attr1 = 2;
    private $attr2 = 3;
    
    // 静态
    public static $attr3 = 4;
    
    // 类型声明 PHP7.4
    public int $attr4 = 4;
    
    // 只读 PHP8
    public readonly $attr5 = 5;
}

类常量

代码语言:php
复制
<?php
class A {
    const ATTR_1 = 1;
    
    // 使用访问修饰符 PHP7.1
    public const ATTR_2 = 2;
    protected const ATTR_3 = 3;
    private const ATTR_4 = 4;
    
    // final常量 PHP8.1
    final const ATTR_5 = 5;
}

class B extends A
{
    const ATTR_1 = 6; // 可以在子类中重定义
}

类的自动加载

推荐使用spl_autolad_register()来注册自动加载器,可以注册任意多个

__autolad()的方式已经废弃,并在PHP8中移除

构造函数和析构函数

  1. 构造器属性提升 <sub>PHP 8</sub>

当构造器参数带有访问控制时,PHP会同时将它们当作对象属性和构造器参数,并赋值到属性

范围解析操作符::

抽象类

任何一个类,如果它里面至少有一个方法是抽象的,那么这个类就必须被声明抽象的

抽象类也可以实现接口

接口

接口也可以使用extends来扩展

也可以定义常量,PHP8.1之前不能被子类或子接口覆盖

Trait

  1. 优先级:当前类>Trait>父类
  2. 冲突解决

insteadof用于排除另一个trait中同名方法

as将trait中方法重命名,也可以用于修改方法的访问修饰符

  1. trait中也可以使用其它trait
  2. trait中可以定义属性、方法、抽象方法、静态方法、静态属性

匿名类

重载

PHP中的重载是指在访问未定义的属性、方法时,会调用特定的魔术方法

属性重载:

  • __set()
  • __get()
  • __isset()
  • __unset()

方法重载:

  • __call()
  • __callStatic()

遍历对象

对象的可见属性都将被遍历

魔术方法

后期静态绑定

self::代表的是当前方法所在的类的实例

static::限定调用的方法未指定类中的方法

代码语言:php
复制
<?php
class A {
    public static function who() {
        echo __CLASS__;
    }
    public static function test() {
        static::who(); // 后期静态绑定从这里开始
    }
}

class B extends A {
    public static function who() {
        echo __CLASS__;
    }
}

B::test(); // Output: B

协变与逆变

协变使子类比父类方法能返回更具体的类型

逆变使子类比父类方法参数类型能接受更模糊的类型。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档