美文网首页
面向对象中的静态延迟绑定

面向对象中的静态延迟绑定

作者: 蔡先森_a1e2 | 来源:发表于2018-06-22 10:36 被阅读0次

面向对象中的静态方法可以用作工厂方法,工厂方法是生成包含类的实例的一种方法,请看下面这一段代码,如果你是一个有强迫症的程序员,你会很难受:

abstract class DomainObject{

}

class User extends DomainObject {

    public static function create(){

    }

}

class Document extends DomainObject{

    public static function create(){

    }

}

上面这一段代码,重复的书写了静态方法creat,如果继承DomainObject的基类有很多,那么我们就要在子类中写更多的creat方法,这对于我们懒惰的程序员来说是一件很痛苦的事情,那该怎么办呢,其实很简单,把creat静态方法写在父类的DomainObject中就好了,请看下面的代码

abstract class DomainObject{

    public static function create(){

        return new self(); 

    }

}

class User extends DomainObject {   

}

class Document extends DomainObject {   

Document::create();

这样看起来是不是比一开始简介了很多,但是如果运行这个例子,php会报错:

PHP Fatal error:Cannot instantiate abstract class DomainObject in ....

为什么会报这样的错误呢,其实在PHP中,父类中的self被解析为定义create()的DomainObject,而不是解析为调用self的Document类,那怎么解决这个办法呢,在PHP5.3之后引入了一个延迟静态绑定的概念,改特性最明显的标志就是新关键字static.static 类似与self,但是它指向的是调用的类而不是包含的类,所以本例中是指调用Document::create()的Document类,它将生成一个Document对象,而不是试图实例化一个DomainObject对象,

因此,现在在静态上下文使用继承关系:

abstract class DomainObject{   

    public static function create(){       

     return new static();    

     }

}

class User extends DomainObject {   

}

class Document extends DomainObject { 

}

Document::create();

这样,上面的代码就会产生一个Document对象.

相关文章

  • 面向对象中的静态延迟绑定

    面向对象中的静态方法可以用作工厂方法,工厂方法是生成包含类的实例的一种方法,请看下面这一段代码,如果你是一个有强迫...

  • Java基础(二)

    面向对象特征;重载和重写;静态绑定和动态绑定;抽象类和接口;包。 面向对象的特征 面向对象的三个基本特征是:封装、...

  • PHP中的延迟静态绑定

    引入: PHP继承模型中有个遗留很久的问题。那就是父类中引用拓展类的最终状态比较困难。 接下来看用两个例子来说明 ...

  • PHP面向对象-后期静态绑定

    说明 准确说,后期静态绑定工作原理是存储了在==上一个==“==非转发调用==”(non-forwarding c...

  • Java Basic 1

    key point Java 和其他语言的比较 什么是Java引用 面向对象的基本特征 封装 继承 多态静态绑定 ...

  • Python学习-面向对象

    查看所有Python相关学习笔记 面向对象 面向对象知识点汇总: 面向对象静态属性实例属性(self)静态方法(@...

  • Java基础-面向对象-静态绑定与动态绑定

    Java工程师知识树[https://www.jianshu.com/p/db77d19a25f6] / Ja...

  • PHP静态延迟绑定

    1、什么是静态延时绑定 1)自 PHP 5.3.0 起,PHP 增加了一个叫做后期静态绑定的功能,用于在继承范围内...

  • static延迟静态绑定

  • 程序语言基础知识

    把一个方法与其所在的类/对象关联起来叫做方法的绑定,绑定分为静态绑定(前期绑定)和动态绑定(后期绑定)。 静态绑定...

网友评论

      本文标题:面向对象中的静态延迟绑定

      本文链接:https://www.haomeiwen.com/subject/brohyftx.html