Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >PHP类与对象

PHP类与对象

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

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

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

基本概念

  1. 使用class关键字来定义类,使用new来创建类的实例
代码语言:php
AI代码解释
复制
<?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
AI代码解释
复制
<?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
AI代码解释
复制
<?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
AI代码解释
复制
<?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
AI代码解释
复制
<?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 删除。

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
PHP中的static
关于静态变量和方法的问题也是面试中经常会出现的问题,这种问题多看手册搞明白原委就能解决,只是确实关于静态变量的问题还是比较绕的,这里我们就结合手册用实际的代码来看!
硬核项目经理
2019/08/06
1K0
PHP 面向对象
面向对象三大特性:封装、继承、多态。 官方文档:http://php.net/manual/zh/language.oop5.php 要创建一个类的实例,必须使用 new 关键字。如果该类属于一个名字空间,则必须使用其完整名称。 你可以使用 ClassName::class 获取一个字符串,包含了类 ClassName 的完全限定名称。 $this self parent static 当一个方法在类定义内部被调用时,有一个可用的伪变量 $this。 使用 self:: 来访问静态方法和静态变量。 使用 s
康怀帅
2018/02/28
1.6K0
PHP7-2: 面向对象开发
以上是PHP7的 基础语法,通过本章的学习,可以对PHP有大体的认识。本章有的语法没有介绍到,学习过其他语言的话,很快会上手的。
程序员海军
2021/10/11
5530
PHP7-2: 面向对象开发
PHP 8 所有新特性一览和代码示例
PHP 8 正式版即将发布:10 月 29 日会发布 RC3,11 月 12 日会发布 RC4,11 月 26 日会发布正式版本。
学院君
2020/10/30
1.2K0
PHP 8 所有新特性一览和代码示例
PHP学习笔记(二)——行云博客
PS:print_r() 函数用于打印变量,以更容易理解的形式展示。如果给出的是 string、integer 或 float 类型变量,将打印变量值本身。如果给出的是 array,将会按照一定格式显示键和元素。object 与数组类似。
行云博客
2020/07/13
3.8K0
PHP 静态属性和静态方法
前面介绍的 PHP 类属性和方法都要在类实例化后才能调用(常量属性除外),除此之外,PHP 还提供了静态属性和静态方法,所谓「静态」指的是无需对类进行实例化,就可以直接调用这些属性和方法,这么生讲有点硬,我们举个例子一看就明白了。
学院君
2020/07/21
4.3K0
PHP 静态属性和静态方法
php面试之面向对象的相关知识(上篇)
面向对象分上下篇,这里上篇涉及到的内容有:一、面向对象与面向过程有什么区别?  二、面向对象有什么特征?   三、什么是构造函数和析构函数?   四、面向对象的作用域范围有哪几种?   五、PHP 中魔术方法有哪些?
友儿
2022/09/11
8940
php代码抄写笔记
php变量类型松散,定义时变量一个类型,在之后可以赋予另一种类型的参数。 三种作用域:local、global、static global关键字用在函数内变量前表示声明以后使用的变量为全局变量。 static关键字用在函数内变量前表示该变量在函数执行完成后不销毁,且static关键字定义的变量赋予的仅是初始值,再次执行函数,不会执行定义中的赋值操作。
木尤
2020/07/14
4.1K0
PHP基础之面向对象篇
前面写的都是运算符、流程控制、排序查找等,下面说一说面向对象的一些内容。这是前面写的,有兴趣可以去看一看。 PHP入门之类型与运算符 PHP入门之流程控制 PHP入门之函数 PHP入门之数组 PHP基础之排序 PHP基础之查找 接下来写一下关于面向对象的内容。
雪痕@
2020/09/27
6620
PHP基础之面向对象篇
PHP面向对象核心(二)——继承、多态、接口
PHP面向对象核心(二) (原创内容,转载请注明来源,谢谢) 三、继承与多态 3.1 继承 1、继承是类级别的复用,关键词为extends;多态是方法级别的复用。 2、类的组合:一个类作为另一个类的属性;类的继承:子类继承父类的全部内容。 3、范围解析运算符(::) 当子类需要调用父类的方法或者属性时使用此运算符; 当调用类常量和静态方法时使用此符号调用。 4、决定采用组合还是继承,目标是低耦合,即使模块之间尽量独立。 继承扩展简单,但破坏封装,且紧耦合;组合缺点是代码量大。 5、当类不是设计用于继承的,可
用户1327360
2018/03/07
9420
PHP面向对象核心(二)——继承、多态、接口
PHP面向对象基础总结
近来参加了几场PHP工程师的面试,但是笔试题答得都不理想,回来总结了一下失败的原因,是没看PHP手册。几家公司的PHP基础面试题都可以在PHP手册上找到。哎,现在才知道最好的面试宝典是PHP手册。
用户7657330
2020/08/14
1.5K0
PHP重载,不一样的重载
PHP所提供的重载(overloading)是指动态地创建类属性和方法。我们是通过魔术方法(magic methods)来实现的。
joshua317
2021/11/01
1.3K0
PHP重载,不一样的重载
PHP基本概念
接口中所有的方法都是抽象的,没有程序体。 接口的方法必须被全部实现,否则将报错。
lilugirl
2019/05/26
1.1K0
PHP 面向对象知识点
定义基本的类: 在类中我们可以定义各种数据成员和成员函数,其中public修饰的函数与变量可以在任何地方被调用,而private修饰的函数只能在本类中被调用子类不可调用,而protected修饰的则可以在本类和子类中被调用但不可以在外部调用.
微软技术分享
2022/12/28
7610
后期静态绑定在PHP中的使用
什么叫后期静态绑定呢?其实我们在之前的文章PHP中的static中已经说过这个东西了。今天我们还是再次深入的理解一下这个概念。
硬核项目经理
2020/03/26
7120
PHP核心技术与最佳实践 读书笔记 第一章面向对象思想的核心概念
面向对象程序设计是一种程序设计范型,同时也是一种程序开发方法。它将对象作为程序的基本单元,将程序和数据封装其中,以提高软件的重用性,灵活性和可扩展性。
lilugirl
2019/05/26
1.2K0
PHP-方法修饰符
1、如果一个类确定不被继承,一个方法确定不会被重写,用final修饰可以提高执行效率。
cwl_java
2022/11/30
2620
PHP-方法修饰符
相关推荐
PHP中的static
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文