广告
返回顶部
首页 > 资讯 > 后端开发 > PHP编程 >php类中static与self的使用区别浅析
  • 650
分享到

php类中static与self的使用区别浅析

2024-04-02 19:04:59 650人浏览 安东尼
摘要

使用 self:: 或者 __CLASS__ 对当前类的静态引用,取决于定义当前方法所在的类: 使用 static:: 不再被解析为定义当前方法所在的类,而是在实际运行时计算的。也可

使用 self:: 或者 __CLASS__ 对当前类的静态引用,取决于定义当前方法所在的类:

使用 static:: 不再被解析为定义当前方法所在的类,而是在实际运行时计算的。也可以称之为“静态绑定”,因为它可以用于(但不限于)静态方法的调用。

静态绑定是PHP 5.3.0,增加的一个功能 用于在继承范围内引用静态调用的类

php类中static和self的区别,php类的定义中经常能看到self和static,在运行的时候经常发现结果并没有区别,但是肯定不是没有区别,因为没有区别为什么会有两个呢?

 一、两者区别

static采用的是延时绑定

所以会导致static能准确知道是父类还是子类的调用

举个例子,这就说明static是个聪明的小朋友,他家里的亲戚他都能准确的认识

而self是个有点笨笨的小朋友,他只认识你自己的父母

二、代码看不同

由下面代码可以看出

self指向的是定义他的类,也就是他只认识自己的父母

static指向的是调用他的类,也就是他可以认出自己的亲戚


<?php
class parents
{
    protected static $name = '我是你父母';
 
    public static function who_self()
    {
        return self::$name;
    }
 
    public static function who_static()
    {
        return static::$name;
    }
 
    public static function get_self()
    {
        return new self();
    }
 
    public static function get_static()
    {
        return new static();
    }
}
 
class kinsfolk extends parents
{
    protected static $name = '我是你亲戚';
}
 
var_dump(kinsfolk::who_self()); //我是你父母
var_dump(kinsfolk::who_static()); //我是你亲戚
var_dump(kinsfolk::get_self()); //object(parents)#1 (0) {}
var_dump(kinsfolk::get_static()); //object(kinsfolk)#1 (0) {}

简单通俗的来说,

self就是写在哪个类里面, 实际调用的就是这个类.

static代表使用的这个类, 就是你在父类里写的static,然后被子类覆盖,使用的就是子类的方法或属性

总结

到此这篇关于php类中static与self区别的文章就介绍到这了,更多相关php类static与self区别内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: php类中static与self的使用区别浅析

本文链接: https://www.lsjlt.com/news/128638.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • php类中static与self的使用区别浅析
    使用 self:: 或者 __CLASS__ 对当前类的静态引用,取决于定义当前方法所在的类: 使用 static:: 不再被解析为定义当前方法所在的类,而是在实际运行时计算的。也可...
    99+
    2022-11-12
  • PHP中self和static的区别
    今天闲来无事,突然有个朋友问我self和static的区别?那么好,就让我来跟大家解答一下这个问题。 self :它会调用当前类的方法;通俗来说,self就是写在哪个类里面, 实际调用的就是...
    99+
    2023-08-31
    php 开发语言
  • 浅析php中==与===的区别
    在PHP中,有时候我们需要比较两个变量是否相等。为了实现这个功能,我们可以使用等于操作符“==”或者全等操作符“===”。虽然两个操作符都可以完成相等比较,但是它们之间还是存在一些差别。在本文中,我们将分别介绍“==”和“===”的具体作用...
    99+
    2023-05-14
    === == php
  • Vue3中ref与toRef的区别浅析
    1. ref是复制,视图会更新 如果利用ref将某一个对象中的某一个属性值变成响应式数据 我们修改响应式数据是不会影响原始数据的; 同时视图会跟新。 ref就是复制 复制是不会影响原...
    99+
    2022-11-12
  • Vue中created与mounted的区别浅析
    大多数人在谈论生命周期钩子时会感到困惑的一件事是 created 和 mounted 之间的区别。有着相似的名称,觉得应该做同样的事情,但还是有一些细微的差别。 首先,created...
    99+
    2022-11-13
  • Mysql中undo、redo与binlog的区别浅析
    目录前言【undo log】 【redo log】 【binlog】 总结前言 MySQL中有六种日志文件,分别是:重做日志(redo log)、回滚日志(undo log)、二进制...
    99+
    2022-11-12
  • 深入浅析java中TCP与UDP的区别
    深入浅析java中TCP与UDP的区别?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。TCP/UDP:TCP主要是面向连接的协议,它包含有建立和拆除连接,保证数据流的顺序和正...
    99+
    2023-05-31
    java tcp udp
  • Kotlin语言中CompileSdkVersion与targetSdkVersion的区别浅析
    目录前言一.CompileSdkVersion与targetSdkVersion是什么1.1 compileSdkVersion1.2 targetSdkVersion二.compi...
    99+
    2023-02-23
    Kotlin CompileSdkVersion与targetSdkVersion的区别 Kotlin CompileSdkVersion
  • 浅析Java中String与StringBuffer拼接的区别
    学习笔记:  1、String拼接会创建一个新的String对象,存储拼接后的字符串;    StringBuffer拼接是直接在本身拼接,会即时刷新。  2.String只能拼接String类型的字符串;    StringBuffer能...
    99+
    2023-05-31
    java string stringbuffer
  • 深入浅析Android中DecorView与ViewRootImpl的区别
    今天就跟大家聊聊有关深入浅析Android中DecorView与ViewRootImpl的区别,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。从setContentView说起一般地,...
    99+
    2023-05-31
    android viewrootimpl decorview
  • 深入浅析Java中HashMap与HashTable容器的区别
    这篇文章给大家介绍深入浅析Java中HashMap与HashTable容器的区别,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。1、HashMap HashMap继承抽象类AbstractMap,实现接口Map、Clon...
    99+
    2023-05-31
    java hashmap hashtable
  • python浅析守护线程与非守护线程的区别与使用
    目录什么是守护线程非守护线程守护线程什么是守护线程 当主线程执行结束后,所有 在运行的子线程都 直接结束,不管子任务是否完成很多语言的 垃圾收集器 就运用了 守护线程,去回收程序不再...
    99+
    2022-11-11
  • 浅析Java中接口和抽象类的七大区别
    目录接口抽象类区别1:定义关键字不同区别2:继承或实现的关键字不同区别3:子类扩展的数量不同区别4:属性访问控制符不同区别5:方法控制符不同区别6:方法实现不同区别7:静态代码块使用...
    99+
    2022-11-12
  • mysql连接查询中and与where的区别浅析
    1. 建表 CREATE TABLE `student` ( `id` int(11) NOT NULL, `name` varchar(255) CHARA...
    99+
    2022-11-12
  • Vue常用指令v-if与v-show的区别浅析
    目录前言1. v-show2. v-if 3. v-show和v-if的区别 1. 在原理方面的区别2. 在使用应用场景方面的区别总结前言 v-show 和v-if 是比较...
    99+
    2022-11-12
  • 浅谈python socket函数中,send与sendall的区别与使用方法
    在python socket编程中,有两个发送TCP的函数,send()与sendall(),区别如下: socket.send(string[, flags])  发送TCP数据,返回发送的字节大小。这个...
    99+
    2022-06-04
    浅谈 使用方法 函数
  • Android中gravity与layout_gravity的使用区别分析
    android:gravity:设置的是控件自身上面的内容位置 android:layout_gravity:设置控件本身相对于父控件的显示位置。 看下如下代码段 代码如下:&...
    99+
    2022-06-06
    layout_gravity gravity Android
  • Java类中this关键字与static关键字的用法解析
    目录前言1:修饰属性,表示调用类中的成员变量。2:this修饰方法3:this表示当前对象的引用前言 今天给大家总结介绍一下Java类中this关键字和static关键字的用法。 t...
    99+
    2022-11-13
  • 浅谈ubuntu 中sudo update与upgrade的作用及区别
    入门linux的同志,刚开始最迫切想知道的,大概一个是中文输入法,另一个就是怎么安装软件。本文主要讲一下LINUX安装软件方面的特点。 在windows下安装软件,我们只需要有EXE文件,然后双击,下一步直...
    99+
    2022-06-04
    浅谈 区别 作用
  • CommonJS与ES6 Module的使用区别分析
    目录前言1. CommonJS1.1 导出1.2 导入2. ES6 Module2.1 导出2.2 导入3. CommonJS 与 ES6 Module 的区别3.1 区别一3.2 ...
    99+
    2022-11-13
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作