Late static binding....sorta :/ - Digital Sandwich - PHP

原创 2007年09月27日 18:39:00

The good news is late static binding has been introduced into head and looks like it will be merged into 5.3 before it is released. The horrible news is I really don't think the patch went as far as it needs to.

If you look at the original posts that cropped up about a year and a half ago the whole purpose of late static binding was to allow the same kind of flexibility provided by inheritance of standard class methods for static methods, properties, and constants. This wouldn't really open the door for any grandios, new kind of applications, it would just allow a new way to code libraries the most prominant example being an Active Record Library.

This is now possible, however I think there is a very unfortunate limitation that I brought up a few times on the Internals mailing list to apparently no avail. The problem is with the fact that static will ALWAYS return the 'resolved' name of the class used to call the current function. So, imagine the following method:


class Foo
{
        //...

        static public function test()
        {
                return static::$some_property;
        }

        //...
}

class Bar extends Foo
{
}
 

If you call test using Foo::test() then static:: will resolve to the 'Foo' class. If you call it using Bar::test() then static:: will resolve to 'Bar'. This is correct and works well for simple inheritance. However things start taking a downward turn the more you use inheritance. Consider the following change to Bar and the addition of a new class Bar_Child:


class Foo
{
        //...

        static public function test()
        {
                return static::$some_property;
        }

        //...
}

class Bar extends Foo
{
        static public function test()
        {
                // Do some work specific to Bar

                return parent::test();
        }

Truncated by Planet PHP, read more at the original (another 1921 bytes)

 
版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

java程序员菜鸟进阶(十五)linux基础入门(三)linux用户和组管理

我们大家都知道,要登录linux操作系统,我们必须要有一个用户名和密码。每一个用户都由一个惟一的身份来标识,这个标识叫做用户ID.系统中的每一个用户也至少需要属于一个"用户分组".同样,用户分组也是由...

献给初学者:谈谈如何学习Linux操作系统

本文出自 “技术成就梦想” 博客,请务必保留此出处http://ixdba.blog.51cto.com/2895551/569329。为了能把这篇不错的文章分享给大家。所以请允许我暂时用原创的形式展...

Linux系统目录结构以及简单说明

Linux系统目录结构以及简单说明  linux目录图: / root --- 启动Linux时使用的一些核心文件。如操作系统内核、引导程序Grub等。home --- 存储...

Linux必学的60个命令

Linux提供了大量的命令,利用它可以有效地完成大量的工 作,如磁盘操作、文件存取、目录操作、进程管理、文件权限设定等。所以,在Linux系统上工作离不开使用系统提供的命令。要想真正理解Linux系...

TCP/IP网络协议---相关设备

一基本概念 1.为什么要分链路层,网络层,运输层,应用层这四层 主要依据是各层的功能,链路层主要负责处理物理接口的细节,网络层处理分组在网络中的活动(IP到IP,尽可能快但不可靠),运输层主要提...

Linux简介及Linux学习路线图

一、Linux 为何物Linux 就是一个操作系统,就像你多少已经了解的 Windows(xp,7,8)和 Max OS ,至于操作系统是什么,就不用过多解释了,如果你学习过前面的入门课程,应该会有个...

Linux的简单介绍和常用命令的介绍

Linux的简单介绍和常用命令的介绍 本说明以Ubuntu系统为例 Ubuntu系统的安装自行百度,或者参考http://www.cnblogs.com/CoderJYF/p/609106...

Linux入门——适合初学者

原文出处:http://www.cnblogs.com/ggjucheng/archive/2011/12/16/2290158.html 学习Linux也有一阵子了,这过程中磕磕撞撞的,遇...

java程序员菜鸟进阶(二)oracle基础详解(二)oracle查询语句和数据排序

本文所以练习都是基于oracle自带提供的一个数据库进行的。数据库中包含员工表emp。部门信息表dept。员工工资工总表下面是三个表的表结构:一:基本查询语句1.最简单的查询所有列语句Select *...

转)Linux学习路线

写一下最近个人的linux学习路线,学完后再好好参考其他人的:1.《Linux程序设计》- 靠它来入门,然后装一个linux系统,学习shell(bash)和linux C,把基础打牢;2. 《深入...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)