self:: vs className:: inside static className methods in PHP

前端 未结 2 1575
别跟我提以往
别跟我提以往 2021-02-07 02:52

I guess there may not be any difference but personal preference, but when reading various PHP code I come across both ways to access the methods class.

What is

相关标签:
2条回答
  • 2021-02-07 03:35

    (Note: the initial version said there was no difference. Actually there is)

    There is indeed a small diference. self:: forwards static calls, while className:: doesn't. This only matters for late static bindings in PHP 5.3+.

    In static calls, PHP 5.3+ remembers the initially called class. Using className:: makes PHP "forget" this value (i.e., resets it to className), while self:: preserves it. Consider:

    <?php
    class A {
        static function foo() {
            echo get_called_class();
        }
    }
    class B extends A {
        static function bar() {
            self::foo();
        }
        static function baz() {
            B::foo();
        }
    }
    class C extends B {}
    
    C::bar(); //C
    C::baz(); //B
    
    0 讨论(0)
  • 2021-02-07 03:46

    With self you can use it within the class and with the "MyClass", as you have, you can reference it externally:

    $instance = new Myclass();
    $variable = $instance::$foo
    
    0 讨论(0)
提交回复
热议问题