美文网首页
PHP类与对象

PHP类与对象

作者: 码一 | 来源:发表于2022-06-03 13:48 被阅读0次

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

PHP类继承.png

基本概念

  1. 使用class关键字来定义类,使用new来创建类的实例

    <?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创建新对象
    将对象实例赋值给一个新变量时,新变量访问的是同一实例。要创建一个新实例必须使用克隆操作

  2. 类的属性和方法存在与不同的空间,所以同一个类的属性和方法可以使用同样的名称

  3. 使用extends实现类继承,PHP只支持单继承。

  4. ::class类名解析

    <?php
    namespace Demo
    {
        class Test()
        {
    
        }
    
        // 方式一
        echo Test::class;
    }
     
    // 方式二 PHP8
    $obj = new Test();
    echo $obj::class; // 等同于 get_class()
    
  5. Nullsafe方法和属性 PHP 8
    ?->nullsafe操作符,对象引用解析为null时不抛出异常,而是返回null

属性

<?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
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. 构造器属性提升 PHP 8
    当构造器参数带有访问控制时,PHP会同时将它们当作对象属性和构造器参数,并赋值到属性

范围解析操作符::

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

接口
接口也可以使用extends来扩展
也可以定义常量,PHP8.1之前不能被子类或子接口覆盖

Trait

  1. 优先级:当前类>Trait>父类

  2. 冲突解决
    insteadof用于排除另一个trait中同名方法
    as将trait中方法重命名,也可以用于修改方法的访问修饰符

  3. trait中也可以使用其它trait

  4. trait中可以定义属性、方法、抽象方法、静态方法、静态属性

匿名类

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

属性重载:

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

方法重载:

  • __call()
  • __callStatic()

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

魔术方法

后期静态绑定
self::代表的是当前方法所在的类的实例

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

<?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

协变与逆变
协变使子类比父类方法能返回更具体的类型
逆变使子类比父类方法参数类型能接受更模糊的类型。

相关文章

  • PHP类与对象

    本文是复习所写,并不会涵盖一些基础知识点 基本概念 使用class关键字来定义类,使用new来创建类的实例

  • php面向对象-类与对象

    一、面向对象思想:php、java、OC等都是支持面向对象编程的。类是抽象的,对象是具体的,比如:你娶了个老婆叫l...

  • PHP 学习笔记(三)

    参考资料:PHP5 权威编程 PHP 中的类和对象 对象:万物皆对象; 类: 任何对象,都...

  • 第七章:类的继承

    继承已为大家所熟知的一个程序设计特性,PHP 的对象模型也使用了继承。继承将会影响到类与类,对象与对象之间的关系。...

  • PHP技术梳理

    PHP语言: PHP基础, 数据类型, 导入文件 string array 面向对象技术, 类, 对象, 继...

  • 08-类与对象

    类与对象 php的类与对象这节,和其它面向对象语言可谓是基本一样,如果说你学了Java或者C++,理解起来就十分容...

  • 2019-07-15

    今天学习PHP类和对象概念

  • 九月十二号

    PHP类和对象之创建一个对象 类的定义方法,类通过关键字class开头,然后是类名与花括号,在花括号中定义类的属性...

  • thinkphp5学习笔记(四)控制器

    控制器类 Controller.php 公共操作与公共类 控制器前置操作 页面跳转与重定向 请求对象与参数绑定 请...

  • 了解PDO

    1、pdo的概念 PDO全称:PHP Data Object ( php 数据对象 )是一系列PHP类,抽象...

网友评论

      本文标题:PHP类与对象

      本文链接:https://www.haomeiwen.com/subject/fifhmrtx.html