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

协变与逆变

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

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

目录
相关文章
|
6月前
|
Java 程序员 PHP
PHP对象和类
PHP对象和类
58 0
|
1月前
|
缓存 安全 PHP
PHP中的魔术方法与对象序列化
本文将深入探讨PHP中的魔术方法,特别是与对象序列化和反序列化相关的__sleep()和__wakeup()方法。通过实例解析,帮助读者理解如何在实际应用中有效利用这些魔术方法,提高开发效率和代码质量。
|
1月前
|
设计模式 SQL 安全
PHP中的设计模式:单例模式的深入探索与实践在PHP开发领域,设计模式是解决常见问题的高效方案集合。它们不是具体的代码,而是一种编码和设计经验的总结。单例模式作为设计模式中的一种,确保了一个类仅有一个实例,并提供一个全局访问点。本文将深入探讨单例模式的基本概念、实现方式及其在PHP中的应用。
单例模式在PHP中的应用广泛,尤其在处理数据库连接、日志记录等场景时,能显著提高资源利用率和执行效率。本文从单例模式的定义出发,详细解释了其在PHP中的不同实现方法,并探讨了使用单例模式的优势与注意事项。通过对示例代码的分析,读者将能够理解如何在PHP项目中有效应用单例模式。
|
2月前
|
SQL 关系型数据库 数据库连接
php连接数据库之PDO,PDO的简单使用和预定义占位符的使用以及PDOStatement对象的使用,占位符的不同形式,bindValue和bindParam绑定预定义占位符参数的区别
本文介绍了PHP中PDO(PHP Data Objects)扩展的基本概念和使用方法。内容包括PDO类和PDOStatement类的介绍,PDO的简单使用,预定义占位符的使用方法,以及PDOStatement对象的使用。文章还讨论了绑定预定义占位符参数的不同形式,即bindValue和bindParam的区别。通过具体示例,展示了如何使用PDO进行数据库连接、数据查询、数据插入等操作。
php连接数据库之PDO,PDO的简单使用和预定义占位符的使用以及PDOStatement对象的使用,占位符的不同形式,bindValue和bindParam绑定预定义占位符参数的区别
|
2月前
|
设计模式 SQL 安全
PHP中的设计模式:单例模式的深入探索与实践在PHP的编程实践中,设计模式是解决常见软件设计问题的最佳实践。单例模式作为设计模式中的一种,确保一个类只有一个实例,并提供全局访问点,广泛应用于配置管理、日志记录和测试框架等场景。本文将深入探讨单例模式的原理、实现方式及其在PHP中的应用,帮助开发者更好地理解和运用这一设计模式。
在PHP开发中,单例模式通过确保类仅有一个实例并提供一个全局访问点,有效管理和访问共享资源。本文详细介绍了单例模式的概念、PHP实现方式及应用场景,并通过具体代码示例展示如何在PHP中实现单例模式以及如何在实际项目中正确使用它来优化代码结构和性能。
46 2
|
2月前
|
PHP
PHP中如何比较两个对象
PHP中如何比较两个对象
|
2月前
|
PHP
PHP中的面向对象编程:理解类与对象
本文将深入探讨PHP中面向对象编程的核心概念——类与对象。通过实例讲解,帮助读者更好地理解如何在PHP中运用OOP编写更高效、可维护的代码。
47 9
|
3月前
|
PHP 开发者
PHP中的面向对象编程:掌握类与对象的精髓
探索PHP的面向对象编程世界,本文将带你了解如何通过创建和操作类来实例化对象。我们将深入讲解类的声明、构造函数的使用以及继承和多态性的概念。准备好,让我们一起在代码的海洋中航行,揭开PHP对象编程的神秘面纱!
|
5月前
|
JSON 搜索推荐 大数据
Elasticsearch:从 ES|QL 到 PHP 对象
【6月更文挑战第9天】Elasticsearch 是一款强大的开源搜索引擎,适用于大数据处理和分析。在 PHP 开发中,使用 ES|QL 构建复杂查询后,通常需将查询结果转换为 PHP 对象。通过 `json_decode()` 函数解析 JSON 数据,可以实现这一目标。示例代码展示了如何将 Elasticsearch 响应转换为 PHP 对象并遍历数据。这样,我们可以进一步处理和操作数据,适应不同项目需求。随着技术和方法的更新,不断学习和适应将提升我们在开发中的效率和创新力。
94 10
|
4月前
|
PHP
如何在PHP中创建一个自定义的观察者类?
【7月更文挑战第2天】如何在PHP中创建一个自定义的观察者类?
30 0