PHP类与对象

简介: PHP语言类与对象学习


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


PHP类继承.png


基本概念

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

<?php

classTest

{

   public$attr=1; // 公共属性

   

   publicfunctionfoo()

   {

       echo$this->attr;

   }

}

 

// 方式一

$obj=newTest();

$obj->foo();

 

// 方式二

// 与可变函数类似,称为可变类吧

$className='Test';

$obj=new$className();

$obj->foo();

 

// 方式三 PHP8

functiongetClassName()

{

   return'Test';

}

$obj=new (getClassName());

$obj=new (Test::class);

  1. 在类内部可以使用new selfnew parent创建新对象
    将对象实例赋值给一个新变量时,新变量访问的是同一实例。要创建一个新实例必须使用克隆操作
  2. 类的属性和方法存在与不同的空间,所以同一个类的属性和方法可以使用同样的名称
  3. 使用extends实现类继承,PHP只支持单继承。
  4. ::class类名解析

<?php

namespaceDemo

{

   classTest()

   {

       

   }

   

   // 方式一

   echoTest::class;

}

 

// 方式二 PHP8

$obj=newTest();

echo$obj::class; // 等同于 get_class()

  1. Nullsafe方法和属性 PHP 8
    ?->nullsafe操作符,对象引用解析为null时不抛出异常,而是返回null

属性

<?php

classTest

{

   // 访问控制符

   public$attr=1;

   protected$attr1=2;

   private$attr2=3;

   

   // 静态

   publicstatic$attr3=4;

   

   // 类型声明 PHP7.4

   publicint$attr4=4;

   

   // 只读 PHP8

   publicreadonly$attr5=5;

}

类常量

<?php

classA {

   constATTR_1=1;

   

   // 使用访问修饰符 PHP7.1

   publicconstATTR_2=2;

   protectedconstATTR_3=3;

   privateconstATTR_4=4;

   

   // final常量 PHP8.1

   finalconstATTR_5=5;

}

 

classBextendsA

{

   constATTR_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

classA {

   publicstaticfunctionwho() {

       echo__CLASS__;

   }

   publicstaticfunctiontest() {

       static::who(); // 后期静态绑定从这里开始

   }

}

 

classBextendsA {

   publicstaticfunctionwho() {

       echo__CLASS__;

   }

}

 

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

协变与逆变

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

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

目录
相关文章
|
4月前
|
Java 程序员 PHP
PHP对象和类
PHP对象和类
47 0
|
1天前
|
PHP
PHP中如何比较两个对象
PHP中如何比较两个对象
|
5天前
|
PHP
PHP中的面向对象编程:理解类与对象
本文将深入探讨PHP中面向对象编程的核心概念——类与对象。通过实例讲解,帮助读者更好地理解如何在PHP中运用OOP编写更高效、可维护的代码。
21 9
|
30天前
|
PHP 开发者
PHP中的面向对象编程:掌握类与对象的精髓
探索PHP的面向对象编程世界,本文将带你了解如何通过创建和操作类来实例化对象。我们将深入讲解类的声明、构造函数的使用以及继承和多态性的概念。准备好,让我们一起在代码的海洋中航行,揭开PHP对象编程的神秘面纱!
|
3月前
|
JSON 搜索推荐 大数据
Elasticsearch:从 ES|QL 到 PHP 对象
【6月更文挑战第9天】Elasticsearch 是一款强大的开源搜索引擎,适用于大数据处理和分析。在 PHP 开发中,使用 ES|QL 构建复杂查询后,通常需将查询结果转换为 PHP 对象。通过 `json_decode()` 函数解析 JSON 数据,可以实现这一目标。示例代码展示了如何将 Elasticsearch 响应转换为 PHP 对象并遍历数据。这样,我们可以进一步处理和操作数据,适应不同项目需求。随着技术和方法的更新,不断学习和适应将提升我们在开发中的效率和创新力。
73 10
|
2月前
|
PHP
如何在PHP中创建一个自定义的观察者类?
【7月更文挑战第2天】如何在PHP中创建一个自定义的观察者类?
18 0
|
2月前
|
PHP
PHP中,你可以使用class关键字来定义一个类
【7月更文挑战第2天】PHP中,你可以使用class关键字来定义一个类
19 0
|
3月前
|
安全 前端开发 测试技术
安全开发-PHP应用&模版引用&Smarty渲染&MVC模型&数据联动&RCE安全&TP框架&路由访问&对象操作&内置过滤绕过&核心漏洞
安全开发-PHP应用&模版引用&Smarty渲染&MVC模型&数据联动&RCE安全&TP框架&路由访问&对象操作&内置过滤绕过&核心漏洞
|
4月前
|
PHP 数据安全/隐私保护
【PHP开发专栏】PHP魔术方法与对象操作
【4月更文挑战第30天】PHP 魔术方法是特殊方法,如`__construct`、`__get`等,在特定时刻自动调用,用于重写默认行为。本文分三部分介绍PHP魔术方法和对象操作:1) 魔术方法包括构造、析构、属性访问等,常用于控制访问权限、自动加载等;2) 对象操作涉及创建、访问属性和方法、克隆及序列化/反序列化;3) 案例展示如何在创建对象时设置默认值。
42 1
|
4月前
|
存储 监控 安全
PHP医院安全(不良)事件报告系统源码 vue2+element支持11大类不良事件上报、审核处理、分析改进
医院安全(不良)事件管理系统采用无责的、自愿的填报不良事件方式,有效地减轻医护人员的思想压力,实现以事件为主要对象,可以自动、及时、实际地反应医院的安全、不良、近失事件的情况,更好地掌握不良事件的发生趋势,为及时采取适当的管理措施和流程、制度改进提供了良好的量化依据。系统通过汇集不同类型事件的报告,从中分析出医院内部潜在的问题和风险,将发生的事故降到最低,从而保证病人安全和医护人员安全。
46 0