PHP:self::和class_name::之间有什么不同?

PHP:self::和class_name::之间有什么不同?,php,Php,我有一门课是这样的: 我想知道以下命令之间的区别,哪一个更好 Class foo { function test() { return false; } function test2() { return self::test(); } function test3() { return foo::test(); } static function test4()

我有一门课是这样的: 我想知道以下命令之间的区别,哪一个更好

Class foo
{
    function test()
    {
        return false;
    }
    function test2()
    {
        return self::test();
    }
    function test3()
    {
        return foo::test();
    }
    static function test4()
    {
        return false;
    }
    function test5()
    {
        return self::test4();
    }
    function test6()
    {
        return static::test4();
    }

}
1-自我测试与自我测试有什么不同;和foo::test? 2-self::test4之间有什么不同;和static::test4? 请简单地解释一下:self正在引用你所在的班级。而class_name可以在类本身之外调用类方法

i、 e-当你想在'foo'之外调用test6-你不能用'self'来调用它,你必须用'foo::'来调用它

哪一个更好

正如我解释的那样。在类内部编写时,使用“self”——这只是“最佳实践”。

简单地说:self——是指您所在的类。而class_name可以在类本身之外调用类方法

i、 e-当你想在'foo'之外调用test6-你不能用'self'来调用它,你必须用'foo::'来调用它

哪一个更好

正如我解释的那样。当在课堂上自己写作时,使用“自我”——这只是“最佳实践”

1-自我测试与自我测试有什么不同;和foo::test

同样,如果在类范围内使用self::会更好,在更改类名时不必更改代码

2-self::test4之间有什么不同;和static::test4

test4是以PHP5.3为基础实现的,可以在静态继承的上下文中引用被调用的类

1-自我测试与自我测试有什么不同;和foo::test

同样,如果在类范围内使用self::会更好,在更改类名时不必更改代码

2-self::test4之间有什么不同;和static::test4

static::test4是以PHP5.3为基础实现的,它可以在静态继承的上下文中引用被调用的类。

self::test之间有什么不同;和foo::test? 它们都以相同的方式工作,但是当你想重命名你的类时;self仍然会指向正确的类,但必须重命名foo

更好的方法是使用$this->test

self::test4之间有什么不同;和static::test4? 后者应用后期静态绑定,因此在扩展此类时会有所不同,例如:

class bar extends foo
{
    function test4() { return true; }
}

$b = new bar;
当调用$b->test6时,它将返回true。

self::test之间有什么不同;和foo::test? 它们都以相同的方式工作,但是当你想重命名你的类时;self仍然会指向正确的类,但必须重命名foo

更好的方法是使用$this->test

self::test4之间有什么不同;和static::test4? 后者应用后期静态绑定,因此在扩展此类时会有所不同,例如:

class bar extends foo
{
    function test4() { return true; }
}

$b = new bar;

然后,当调用$b->test6时,它将返回true。

哪一个更好?这不是应该问的问题;答案几乎可以肯定,这要看情况而定。不过,在第一种情况下,$this->test是典型的方法。哪种方法更好?这不是应该问的问题;答案几乎可以肯定,这要视情况而定。不过,在第一种情况下,$this->test将是典型的方法。@GeraldSchneider不,这是static::将做但不是self::。@GeraldSchneider不,这是static::将做但不是self::。
class bar extends foo
{
    function test4() { return true; }
}

$b = new bar;