zoukankan      html  css  js  c++  java
  • 所谓静态绑定

    PHP 的 OPP 机制,具有继承和类似虚函数的功能,例如如下的代码:

    class A
    {
        public function callFuncXXOO()
        {
            print $this->funcXXOO();
        }
    
        public function funcXXOO()
        {
            return "A::funcXXOO()";
        }
    }
    
    class B extends A
    {
        public function funcXXOO()
        {
            return "B::funcXXOO";
        }
    }
    
    $b = new B;
    $b->callFuncXXOO();

    输出是:

    B::funcXXOO

    可以看到,当在 A 中使用 $this->funcXXOO() 时,体现了“虚函数”的机制,实际调用的是 B::funcXXOO().
    然而如果将所有函数都改为静态函数:

    class A
    {
        static public function callFuncXXOO()
        {
            print self::funcXXOO();
        }
    
        static public function funcXXOO()
        {
            return "A::funcXXOO()";
        }
    }
    
    class B extends A
    {
        static public function funcXXOO()
        {
            return "B::funcXXOO";
        }
    }
    
    $b = new B;
    $b->callFuncXXOO();

    情况就没这么乐观了,输出是:

    A::funcXXOO()

    这是因为 self 的语义本来就是“当前类”,所以 PHP5.3 给 static 关键字赋予了一个新功能:后期静态绑定:

    class A
    {
        static public function callFuncXXOO()
        {
            print static::funcXXOO();
        }
    
        // ...
    }
    
    // ...

    这样就会像预期一样输出了:

    B::funcXXOO
  • 相关阅读:
    csrf & xss
    android_sqlite
    android_error
    oracle笔记
    android_lesson_1
    mysql 设置编码
    前端进阶Event
    前端进阶Position
    chrome插件开发资料
    dom4j selectNodes
  • 原文地址:https://www.cnblogs.com/zhco/p/9577211.html
Copyright © 2011-2022 走看看