旗下导航:搜·么
当前位置:网站首页 > MySQL教程 > 正文

php完成后期静态绑定【MySQL教程】,php,绑定,静态

作者:搜教程发布时间:2019-12-01分类:MySQL教程浏览:74评论:0


导读:后期静态绑定事情道理是存储了在上一个“非转发挪用”(non-forwardingcall)的类名。当举行静态要领挪用时,该类名即为明白指定的谁人(通常在::运算符左边部份);...

后期静态绑定事情道理是存储了在上一个“非转发挪用”(non-forwarding call)的类名。当举行静态要领挪用时,该类名即为明白指定的谁人(通常在 :: 运算符左边部份);当举行非静态要领挪用时,即为该对象所属的类。

所谓的“转发挪用”(forwarding call)指的是经由过程以下几种体式格局举行的静态挪用:self::parent::static:: 以及forward_static_call() 。可用 get_called_class()函数来获得被挪用的要领地点的类名,static:: 则指出了其局限。

self:: 的限定

运用 self:: 或许 __CLASS__ 对当前类的静态援用,取决于定义当前要领地点的类:

例:

class  A  {
    public static function  who () {
        echo  __CLASS__ ;
    }    public static function  test () {
         self :: who ();
    }
}class  B  extends  A  {
    public static function  who () {
        echo  __CLASS__ ;
    }
}

B :: test ();

效果:

A

static(后期静态绑定)

后期静态绑定本想经由过程引入一个新的关键字示意运行时最初挪用的类来绕过限定。简朴地说,这个关键字可以让你在上述例子中挪用 test() 时援用的类是 B 而不是 A。终究决议不引入新的关键字,而是运用已预留的 static 关键字。

例:

<?phpclass A {
    public static function who() {
        echo __CLASS__;
    }    public static function test() {
        static::who(); // 后期静态绑定从这里最先
    }
}class B extends A {
    public static function who() {
        echo __CLASS__;
    }
}

B::test();?>

效果:

B

static 和 $this 的区分

在非静态环境下,所挪用的类即为该对象实例所属的类。因为 $this-> 会在统一作用局限内尝试挪用私有要领,而 static:: 则可能给出差别效果。另一个区分是 只能用static:: 挪用静态属性。

例:挪用私有要领

<?phpclass A {
    private function foo() {
        echo "success!\n";
    }    public function test() {
        $this->foo();        static::foo();
    }
}class B extends A {
   /* foo() will be copied to B, hence its scope will still be A and
    * the call be successful */}class C extends A {
    private function foo() {
        /* original method is replaced; the scope of the new one is C */
    }
}$b = new B();$b->test();$c = new C();$c->test();   //fails

效果:

success!
success!
success!
Fatal error:  Call to private method C::foo() from context 'A' in /tmp/test.php on line 9

转发和非转发挪用

后期静态绑定的剖析会一直到获得一个完整剖析了的静态挪用信息为止。另一方面,假如静态挪用运用 parent:: 或许 self:: 将转发挪用信息。

例:

class A {
    public static function foo() {
        static::who();
    }    public static function who() {
        echo __CLASS__."\n";
    }
}class B extends A {
    public static function test() {
        A::foo();        parent::foo();        self::foo();
    }    public static function who() {
        echo __CLASS__."\n";
    }
}class C extends B {
    public static function who() {
        echo __CLASS__."\n";
    }
}

C::test();

效果:

ACC

相干引荐:

php后期静态绑定实例详解

php静态绑定细致报告

php后静态绑定的定义和运用要领实例详解

以上就是php完成后期静态绑定的细致内容,更多请关注ki4网别的相干文章!

标签:php绑定静态


欢迎 发表评论: