使用 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区别内容请搜索Devmax以前的文章或继续浏览下面的相关文章希望大家以后多多支持Devmax!

php类中static与self的使用区别浅析的更多相关文章

  1. 从iOS应用程序发送帖子到PHP脚本不工作…简单的解决方案就像

    我之前已经做了好几次了但是由于某些原因我无法通过这个帖子…我尝试了设置为_POST且没有的变量的PHP脚本……当它们未设置为发布时它工作精细.这是我的iOS代码:这里是PHP的一大块,POST变量不在正确的位置?我想这对于更有经验的开发人员来说是一个相当简单的答案,感谢您的帮助!解决方法$_POST是一个数组,而不是一个函数.您需要使用方括号来访问数组索引:

  2. Swift:实例方法和类型方法

    大家对“实例方法和类型方法”的概念应该不陌生了,在objective-c中很常见。例如:1.实例方法调用的时候,必须先进行实例化一个对象,然后调用init方法。而在Swift中写法有所改变,它使用class和static关键字来标示。

  3. swift学习2 元组 tuples

    swift中出现了一种新的数据结构,非常牛掰的元组tuples如果懂PHP的猿,会发现这个元组和PHP的数组非常类似,同样是可以默认不指定key,也可以指定key目前的学习疑问是,如何进行元组的遍历?

  4. Swift开发必备技巧:static和class的使用

    Swift中表示“类型范围作用域”这一概念有两个不同的关键字,它们分别是static和class。但是在Swift中,这两个关键字却是不能用混的。在非class的类型上下文中,我们统一使用static来描述类型作用域。这包括在enum和struct中表述类型方法和类型属性时。static适用的场景有这些:enum的情况与这个十分类似,就不再列举了。在Swift中class、struct和enum都是可以实现protocol的。

  5. OC和Swift中的static

    在非class的类型上下文中,我们统一使用static来描述类型作用域,class关键字是专门用在class类型的上下文中的,可以用来修饰类方法以及类的计算属性。Swift1.2之后,类也可以通过static关键字拥有类型存储属性了,static相当于classfinal标识符的别名,类中的static属性拥有全局作用域和懒加载属性。

  6. swift的静态属性(方法)和java的不同

    swift在任何情况下静态属性都要加上类名做为前缀,在java中通过实例名使用静态属性是一个warning,在swift中这里是一个错误swift中的static属性===swift中的finalclass====java中的finalstaticswift多出了class属性这个概念,用来表示`可以被子类重写的static属性`,然并卵,我觉得不如直接使用static和finalstatic,少一种概念swift中子类不能覆盖父类的storedproperty,但是可以覆盖父类的computedprop

  7. JokeClient-Swift 仿写学习

    STATIC和CLASSSwift中表示“类型范围作用域”这一概念有两个不同的关键字,它们分别是static和class。在Swift中class,struct和enum都是可以实现某个protocol的。在Swift中编译器不仅不会对AnyObject实例的方法调用做出检查,甚至对于AnyObject的所有方法调用都会返回Optional的结果。摘自:ANY和ANYOBJECTSELECTOR在Swift中没有@selector了,取而代之,从Swift2.2开始我们使用#selector来从暴露给Ob

  8. Swift 学习笔记 [2] 类 结构体 枚举

    错误处理四种错误处理方法传播给调用该函数的代码funcprocesFn()throwtryprocessFn()docatch捕获do{tryexpression}catchpattern1{}catchpattern2{}将错误转成可选值funcprocessFn()throw->Int{}lettry?processFn()defer定义:defer定义的函数内,在此函数完成后,立即再次调用defer定义的代码块。无关的话学了还是要用,第一版Swift文档出来的时候,还凑热闹学了一次,现在都忘得差不多

  9. 在Swift中使用dispatch_once单例模型

    到目前为止,我已经能够得到一个非线程安全模型:在Static结构中包含单例实例应该允许单个实例与单例实例没有冲突,没有复杂的命名模式,它应该使事情相当私密。根据我对Swift的经验,有三种方法来实现支持延迟初始化和线程安全的Singleton模式。dispatch_once传统的Objective-C方法移植到Swift。

  10. Swift中的static func和class func有什么区别?

    我可以在Swift库中看到这些定义:定义为staticfunc的成员函数和定义为func类的另一个函数之间有什么区别?是简单的静态是结构和枚举的静态函数,类和协议的类?有什么其他差别,应该知道吗?在语法本身中有这种区别的理由是什么?一些其他的区别是类函数是动态分派的,可以被子类覆盖。为协议选择了类,因此不必有第三个关键字来表示静态或类。

随机推荐

  1. js中‘!.’是什么意思

  2. Vue如何指定不编译的文件夹和favicon.ico

    这篇文章主要介绍了Vue如何指定不编译的文件夹和favicon.ico,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

  3. 基于JavaScript编写一个图片转PDF转换器

    本文为大家介绍了一个简单的 JavaScript 项目,可以将图片转换为 PDF 文件。你可以从本地选择任何一张图片,只需点击一下即可将其转换为 PDF 文件,感兴趣的可以动手尝试一下

  4. jquery点赞功能实现代码 点个赞吧!

    点赞功能很多地方都会出现,如何实现爱心点赞功能,这篇文章主要为大家详细介绍了jquery点赞功能实现代码,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

  5. AngularJs上传前预览图片的实例代码

    使用AngularJs进行开发,在项目中,经常会遇到上传图片后,需在一旁预览图片内容,怎么实现这样的功能呢?今天小编给大家分享AugularJs上传前预览图片的实现代码,需要的朋友参考下吧

  6. JavaScript面向对象编程入门教程

    这篇文章主要介绍了JavaScript面向对象编程的相关概念,例如类、对象、属性、方法等面向对象的术语,并以实例讲解各种术语的使用,非常好的一篇面向对象入门教程,其它语言也可以参考哦

  7. jQuery中的通配符选择器使用总结

    通配符在控制input标签时相当好用,这里简单进行了jQuery中的通配符选择器使用总结,需要的朋友可以参考下

  8. javascript 动态调整图片尺寸实现代码

    在自己的网站上更新文章时一个比较常见的问题是:文章插图太宽,使整个网页都变形了。如果对每个插图都先进行缩放再插入的话,太麻烦了。

  9. jquery ajaxfileupload异步上传插件

    这篇文章主要为大家详细介绍了jquery ajaxfileupload异步上传插件,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

  10. React学习之受控组件与数据共享实例分析

    这篇文章主要介绍了React学习之受控组件与数据共享,结合实例形式分析了React受控组件与组件间数据共享相关原理与使用技巧,需要的朋友可以参考下

返回
顶部