首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

PHP 7.0之前版本中的延迟静态绑定& isset

延迟静态绑定(Late Static Binding)是指在PHP 7.0之前的版本中,当使用静态方法或属性时,如果在子类中调用父类的静态方法或属性,那么父类中的静态方法或属性会被继承,而不是被覆盖。

在PHP中,静态方法和属性是属于类的,而不是属于对象的。在继承关系中,子类可以继承父类的静态方法和属性。然而,在PHP 5.3之前的版本中,当子类中调用父类的静态方法或属性时,如果父类中存在同名的静态方法或属性,子类调用的是父类的静态方法或属性,而不是子类自己的。

延迟静态绑定的优势在于可以在子类中调用父类的静态方法或属性,而不会被覆盖。这样可以方便地在子类中扩展父类的功能,同时保留父类的原有功能。

延迟静态绑定的应用场景包括但不限于以下几个方面:

  1. 在框架开发中,可以使用延迟静态绑定来实现插件机制,让插件可以扩展框架的静态方法或属性。
  2. 在面向对象的设计模式中,延迟静态绑定可以用于实现单例模式,保证只有一个实例被创建。
  3. 在多态的场景中,延迟静态绑定可以用于实现多态的静态方法,让不同的子类可以根据自己的需求来实现相同的静态方法。

腾讯云相关产品中与延迟静态绑定相关的产品和服务有限,因此无法提供具体的产品和产品介绍链接地址。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

理解PHP延迟静态绑定

static::static其实是运行时所在类别名,并不是定义类时所在那个类名。这个东西可以实现在父类,能够调用子类方法和属性。...非转发调用 那么非转发调用其实就是明确指定类名静态调用(foo::bar())和非静态调用($foo->bar()) 后期静态绑定原理 后期静态绑定工作原理是存储了在上一个“非转发调用”(non-forwarding...who() { echo __CLASS__; } public static function test() { static::who(); // 后期静态绑定从这里开始...方法,然后会执行static::who(),而static::static表示运行时所在类别名,此时运行类名是B,所以static::who()就是执行Bwho方法,所以输出B。...\n"; } } C::test(); 输出: A C C 分析:运行C::test()会调用C继承自Btest方法,这个方法首先执行是Afoo方法,此时属于静态方法调用,static

1.3K20

PHP延迟静态绑定深入讲解

前言 所谓延迟静态绑定,顾名思义,静态调用时::符号左侧部分绑定延迟,也就是说不再被解析为定义当前方法所在类,而是在实际运行时计算。...本文主要介绍了关于PHP延迟静态绑定相关内容,下面话不多说了,来一起看看详细介绍吧。 嗅到了坏味道 这段时间看项目后台PHP代码,看到了类似于以下一段代码,我把它抽出来: <?...延迟静态绑定PHP5.3以后引入了延迟静态绑定。再看下面这段代码: 后期静态绑定本想通过引入一个新关键字表示运行时最初调用类来绕过限制。简单地说,这个关键字能够让你在上述例子调用 test() 时引用类是 B 而不是 A。...对于文章一开始例子,可以这么改: return new static(); // 改变这里,后期静态绑定 这种使用后期静态绑定,在使用PHP实现23设计模式时候,你会感到很轻松

59820

PHP静态延迟绑定和普通静态效率对比

PHP静态延迟绑定和普通静态效率对比 只是一个简单小实验,对比了下 延迟绑定 和 非延迟效率 延迟绑定主要就是使用 static 关键字来替代原来 self ,但功能非常强大了 实验代码: class...把时间用在更多地方,少做重复劳动事情】/'d'); protected static $cc5 = array('a5', 'b', 'c', 'd'); public static function...,其中 A 类是使用了静态延迟, B 类是非延迟, C 类是继承A类实现了静态成员变量和方法延迟绑定。...过程也不多说了,环境是 PHP5.4.27 直接上测试结果: 有两种情况, 当只有 A、B类(也就是不让任何类继承A类)时,效率上几乎没有差别的 当A类被C类继承了之后,使用静态延迟绑定A类性能将会比...类后,重载了部分 A 类静态成员变量,重载越多则速度和 B 类(非延迟)就越接近,但 A 类速度仍然会比 B 类 和 C 类慢

61730

后期静态绑定PHP使用

后期静态绑定PHP使用 什么叫后期静态绑定呢?其实我们在之前文章PHPstatic已经说过这个东西了。今天我们还是再次深入理解一下这个概念。...别激动,这是普通静态绑定。self关键字调用内容取决于它定义时所在类。也就是说不管怎么继承,用哪个子类来调用test()方法,self关键字都会调用是A类who()方法。 而后期静态绑定呢?...普通静态调用可不是这样,但是现实我们又有这样需求,就像实例化对象调用方式一样来调用静态属性方法,这时,我们就可以使用static关键字来实现后期静态绑定。...官方文档定义如下: 当进行静态方法调用时,该类名即为明确指定那个(通常在 :: 运算符左侧部分);当进行非静态方法调用时,即为该对象所属类。 该功能从语言内部角度考虑被命名为“后期静态绑定”。...“后期绑定意思是说,static:: 不再被解析为定义当前方法所在类,而是在实际运行时计算。也可以称之为“静态绑定”,因为它可以用于(但不限于)静态方法调用。

69310

PHP7新特性和变化

PHP7新特性和变化 php7出了不少语法糖和新操作,让我们来看看代码中常用一些骚东西,拥抱变化! PHP7.0新特性 组合比较符 组合比较符号用于比较两个表达式。... ['a', 'b']); // int(0) null合并运算符 由于日常使用存在大量同时使用三元表达式和isset操作。...::call 闭包绑定 简短干练暂时绑定一个方法到对象上闭包并调用它。...class A {private $x = 1;} // PHP 7 之前版本代码 $getXCB = function() {return $this->x;}; $getX = $getXCB-...因为在 PHP 7 版本,已经使用抛出异常错误处理机制了。 (如果代码没有捕获Error异常,那么会引发致命错误)。set_error_handle不一定接收是异常,有可能是错误。

4K41

Laravel5.2之PHP重载(overloading)

说明:本文主要讲述PHP重载概念,由于Laravel框架中经常使用这块知识点,并且PHP重载概念又与其他OOP语言如JAVA重载概念不一样,故复习并记录相关知识点。...overloading) 在Laravel中就大量应用了重载相关知识,如在IlluminateSupportFacadesFacade中就用到了方法重载知识:使用魔术方法__callStatic()来动态创建类未定义或不可见静态方法...PHP重载概念与其他OOP语言如JAVA语言中重载概念还不一样,PHP重载概念主要是:动态创建类属性和方法,而不是一般类中方法名一样而参数不一样。...PHP是可以动态创建一个类未定义属性或方法,这也是PHP这个语言一个比较灵活特性,如: class Person { } $person = new Person(); $person->...resolveFacadeInstance(static::getFacadeAccessor());//这里调用Config::getFacadeAccessor(),返回'config',static是静态延迟绑定

3.1K31

PHP7 新特性简介(一)

另外其PHP7兼容性也是非常好。因此,其他版本PHP7迁移过程,程序调整不会太大。本文不针对性能提升原因做深入研究,主要是简单描述一下PHP7一些新增特性。...php //获取用户openid.先从$_GET获取,如果没有从$_POST获取,如果还是不存在,就默认空 //PHP7之前写法 $sOpenid = isset($_GET...任何一个匿名函数PHP都会自动产生一个Closure类对象。如果需要复制一个闭包对象且调用它,在PHP7之前版本,写法较为繁琐,而在PHP7可以通过call方法来快速实现。 <?...php class A { private $x = 1; } // PHP 7 之前版本代码 $getXCB = function()...{ return $this->x; }; //复制闭包对象$getXCB,并将该闭包绑定到类A实例化对象上,“绑定对象”决定了函数$this取值

1.9K00

phpself与static区别

static关键字和延迟静态绑定(late static binding) 在PHP5.3,加入了一个新特性,叫做延迟静态绑定。它可以帮我们实现多态,解决上面的问题。...简单来说,延迟静态绑定意味着,当我们用static关键字调用一个继承方法时,它将在运行时绑定调用类(calling class)。...在上面的例子,如果我们使用延迟静态绑定(static),意味当我们调用“Mercedes::model();”时,class MercedesgetModel方法将会被调用。...php 5.3以下版本无法使用延迟静态绑定 注意,php 5.3之前版本无法使用延迟静态绑定。如果尝试在php 5.3以下版本运行上面的例子,将会报错。...phpself和static 现在我们将例子self用static替换,可以看到,两者区别在于:self引用是当前类(current class)而static允许函数调用在运行时绑定调用类

54420

hyperf框架使用rabbitMQ生产消息至laravellumen进行消费

背景 需要做项目迁移时,例如laravel迁移至hyperf时,因为基本上都是一步一步迁移,仍有例如支付回调等依旧在laravel框架中进行消费情况。...需要接管处理消息queue进行数据格式改造,利用构造同样命名空间job去进行投递,他会序列化数据,可以debug一下内容哦,然后投递至rabbitMQ后,laravel进行消费就好啦。...其中hyperf版本背景为2.1 话不多说开干 在app下建立Job目录为例,大家可以根据情况来 在Job目录下建立Job.php,复制以下代码 <?...routingKey, "x-message-ttl" => $ttl * 1000, ))); //绑定延迟队列到交换器上...Copy 使用方式 注意需要和laravel/lumen 保持同样命名空间哦 创建job需要继承 ```AppJobJob`` <?

86510

Laravel源码解析之Database

在我们学习和使用一个开发框架时,无论使用什么框架,如何连接数据库、对数据库进行增删改查都是学习重点,在Laravel我们可以通过两种方式与数据库进行交互: DB, DB是与PHP底层 PDO直接进行交互...在讲服务容器绑定时就说过了依赖注入其中一个作用是延迟初始化对象,所以只要在用到数据库连接实例时它们才会被创建。...db DatabaseManger 作为Database面向外部接口, DB这个Facade就是DatabaseManager静态代理。...->app = $app; $this->factory = $factory; } ConnectionFactory是在上面介绍绑定 db服务时候传递给DatabaseManager。...总结 说东西有点多,我们来总结下文章里讲到Database这几个组件角色 名称 作用 DB DatabaseManager静态代理 DatabaseManager Database面向外部接口

1.3K30

PHP7.0~PHP7.1~PHP7.2~PHP7.3~PHP7.4新特性

PHP7.0新特性 PHP7.1新特性 PHP7.2新特性 PHP7.3新特性 PHP7.4新特性 PHP7.0新特性 1.标量类型声明 标量类型声明有两种模式: 强制 (默认) 和 严格模式。...php class A {private $x = 1;} // PHP 7 之前版本代码 $getXCB = function() {return $this->x;}; $getX = $getXCB...> 复制代码 13.生成器可以返回表达式 此特性基于 PHP 5.5 版本引入生成器特性构建。..., 因为它使得调用生成器客户端代码可以直接得到生成器(或者其他协同计算)返回值, 相对于之前版本客户端代码必须先检查生成器是否产生了最终值然后再进行响应处理 来得方便多了。...可以使用 list() 函数来展开实现了 ArrayAccess 接口对象 ¶ 在之前版本,list() 函数不能保证 正确展开实现了 ArrayAccess 接口对象, 现在这个问题已经被修复

14.9K20

扫码

添加站长 进交流群

领取专属 10元无门槛券

手把手带您无忧上云

扫码加入开发者社群

相关资讯

热门标签

活动推荐

    运营活动

    活动名称
    广告关闭
    领券