PHP面向对象之后期静态绑定功能介绍_php实例

本文将对PHP后期静态绑定功能进行介绍,它主要用于解决在继承范围内引用静态调用的类

首先来看下面这个例子:

复制代码 代码如下:

class Person
{
 
    public static function status()
    {
        self::getStatus();
    }
 
    protected static function getStatus()
    {
        echo "Person is alive";
    }
 
}
 
class Deceased extends Person
{
 
    protected static function getStatus()
    {
        echo "Person is deceased";
    }
 
}
 
Deceased::status(); //Person is alive

很明显,结果不是我们预期的,这是因为self::取决于定义时所在的类,而不是运行中的类。为了解决这个问题,你可能会在继承类中重写status()方法,更好的解决方案是PHP 5.3后添加了后期静态绑定的功能。

复制代码 代码如下:

class Person
{
 
    public static function status()
    {
        static::getStatus();
    }
 
    protected static function getStatus()
    {
        echo "Person is alive";
    }
 
}
 
class Deceased extends Person
{
 
    protected static function getStatus()
    {
        echo "Person is deceased";
    }
 
}
 
Deceased::status(); //Person is deceased

可见,static::不在指向当前所在的类,实际上,它是在运行中计算的,强制获取最终类的所有属性。

因此,建议,以后不要再使用self::,使用static::

时间: 2024-09-20 04:14:28

PHP面向对象之后期静态绑定功能介绍_php实例的相关文章

PHP面向对象之后期静态绑定功能介绍

  本文将对PHP后期静态绑定功能进行介绍,它主要用于解决在继承范围内引用静态调用的类. 首先来看下面这个例子: 代码如下: class Person { public static function status() { self::getStatus(); } protected static function getStatus() { echo "Person is alive"; } } class Deceased extends Person { protected st

PHP中的类型提示(type hinting)功能介绍_php实例

概述 从PHP5开始,我们可以使用类型提示来指定定义函数时,函数接收的参数类型.如果在定义函数时,指定了参数的类型,那么当我们调用函数时,如果实参的类型与指定的类型不符,那么PHP会产生一个致命级别的错误(Catchable fatal error). 类名称和数组 在定义函数时,PHP只支持两种类型声明:类名称和数组.类名称表名该参数接收的实参为对应类实例化的对象,数组表明接收的实参为数组类型.下面是一个例子: 复制代码 代码如下: function demo(array $options){

Smarty中的注释和截断功能介绍_php模板

注释 复制代码 代码如下: {* 这是一个单行Smarty注释 来自于jb51.net,网页源代码里看不见*} {* 这是一个多行    Smarty注释    并不发送到浏览器 *} 模板注释由星号包围,继而由分隔符包围,型如:{* 这是一个注释 *}.Smarty注释不会在最终模板的输出中显示,这点和不同.前者对于在模板中插入内部注释有用,因为没有人能看到.;-) http://www.itlearner.com/code/smarty_cn/language.basic.syntax.ht

PHP面向对象详解(三)_php实例

面向对象 对象概念是面向对象技术的核心.在显示世界里我们所面对的事情都是对象,如计算机.电视机.自行车等.在面向对象的程序设计中,对象是一个由信息及对信息进行处理的描述所组成的整体,是对现实世界的抽象. 对象的主要三个特性 对象的行为:可以对 对象施加那些操作,开灯,关灯就是行为. 对象的形态:当施加那些方法是对象如何响应,颜色,尺寸,外型. 对象的表示:对象的表示就相当于身份证,具体区分在相同的行为与状态下有什么不同. 面向对象模型 面向对象的概念: oop(面向对象的编程)它能是其代码更加简

PHP中的Streams详细介绍_php实例

Streams 是PHP提供的一个强有力的工具,我们常常在不经意会使用到它,如果善加利用将大大提高PHP的生产力. 驾驭Streams的强大力量后,应用程序将提升到一个新的高度. 下面是PHP手册中对Streams的一段描述: 复制代码 代码如下: Streams 是在PHP 4.3.0版本被引入的,它被用于统一文件.网络.数据压缩等类文件的操作方式,为这些类文件操作提供了一组通用的函数接口.简而言之,一个stream就是一个具有流式行为的资源对象.也就是说,我们可以用线性的方式来对stream

Yii框架结合sphinx,Ajax实现搜索分页功能示例_php实例

本文实例讲述了Yii框架结合sphinx,Ajax实现搜索分页功能的方法.分享给大家供大家参考,具体如下: 效果图: 控制器: <?php namespace backend\controllers; use Yii; use yii\web\Controller; use yii\data\Pagination; use SphinxClient; use yii\db\Query; use yii\widgets\LinkPager; use backend\models\Goods; cl

简单PHP会话(session)说明介绍_php实例

现在程序员愈发的不容易了,想要精通,必然要寻本溯源,这其实与目前泛滥的愈发高级的语言以及众多的框架刚好相反,因为它们在尽可能的掩盖本源使其简单,个人称之为程序员学习悖论. 注:作者接触web开发和php两周左右,以下内容适合初学者. 1.导读 从文题目看,<简单PHP会话(Session)说明> 是已经圈定了本文的内容范围,试图阐明Session(文中对会话称为Session) 在PHP语言中是如何实现以及使用的,重点在于基本理解后的使用. 文章思路是首先搞清楚session是什么东西,Ses

微信公众平台开发(五) 天气预报功能开发_php实例

一.简介 前面几篇文章对微信公众平台的开通及简单使用做了简单的介绍,但都没有涉及到实际使用中的问题,例如天气查询,公交查询,快递查询等.接下来的几篇文章将对实际生活中会经常使用到的一些功能进行开发讲解,以供读者参考. 这一篇文章将对大家每天都会关心的天气查询进行开发,例如,用户发送消息 "苏州天气",则会返回苏州实时天气状况,以及未来两天甚至未来五天的天气状况. 二.思路分析 首先要对用户发送过来的消息进行判断,判断消息里是否含有"天气"关键字,如果含有,则需要继续

PHP读取大文件的类SplFileObject使用介绍_php实例

如果加载的文件特别大时,如几百M,上G时,这时性能就降下来了,那么PHP里有没有对大文件的处理函数或者类呢? 答案是:有的.PHP真的越来越"面向对象"了,一些原有的基础的SPL方法都开始陆续地实现出class了.从 PHP 5.1.0 开始,SPL 库增加了 SplFileObject 与 SplFileInfo 两个标准的文件操作类.SplFileInfo 是从 PHP 5.1.2 开始实现的.从字面意思理解看,可以看出 SplFileObject 要比 SplFileInfo 更