为什么只有静态调用返回2?
在我看来,不是绝对名称的类调用应该取决于类
中的当前名称空间<?php
namespace A {
class B {
static function test(){
echo 1;
}
static function check(){
B::test();//1 why?
self::test();//1
static::test();//2
}
}
}
namespace B {
class B extends \A\B {
static function test(){
echo 2;
}
}
}
namespace {
B\B::check();
}
答案 0 :(得分:0)
B::test()
在A
命名空间内执行,因此获取B
命名空间提供的A
类。因此调用A\B::test
。当前班级的背景与此无关。
以下示例显示,遗传与此行为无关。
<?php
namespace A {
class B {
static function test() {
echo 3;
}
}
class A {
static function test(){
echo 1;
}
static function check(){
B::test();//3
self::test();//1
static::test();//2
}
}
}
namespace B {
class B extends \A\A {
static function test(){
echo 2;
}
}
}
namespace {
B\B::check();
}
当你在static::test
命名空间时, 2
会返回A
,因为static
从调用超类而不是当前命名空间获取上下文。
self::test
返回1
,因为self
获取当前类的上下文而不是超类。