-
카테고리
-
세부 분야
프로그래밍 언어
-
해결 여부
미해결
Context에 대해서 궁금한게 있습니다
22.02.12 02:14 작성 조회수 156
0
안녕하세요 궁금한게 있습니다
static::who메소드를 호출하는 부분에서 부모 Class 또는 자식 Class에 static::(임의의 메소드)가 없으면 부모 또는 자식에서 메소드를 찾는건가요?
왜냐하면 아래 코드 실행 결과가 이렇게 나왔습니다
string(5) "A Foo" string(5) "B Foo" string(1) "B"
class A
{
public static function foo()
{
var_dump('A Foo');
static::who();
}
public static function who()
{
var_dump(__CLASS__);
}
}
class B extends A
{
public static function test()
{
self::foo();
}
public static function who()
{
var_dump('B Foo');
var_dump(__CLASS__);
}
}
$b = new B();
$b->test();
답변을 작성해보세요.
2
정상우
지식공유자2022.02.20
안녕하세요. 답변이 늦어 죄송합니다. 코드를 살펴보죠.
일단, 상속에서 자식클래스에서 찾을 수 없는 경우에는 부모클래스에서 찾는게 기본적인 동작이라고 보시면 됩니다. 그 예로 B::test() 에서 self::foo() 를 시도하였으나 찾지못하였기 때문에 부모의 A::foo() 를 호출(A Foo)하였습니다.
A::foo() 에서 static::who() 를 호출, 그러나 A 가 아닌 B Foo 가 나온 것은 Static Context 의 경우 Lazy 하게 동작하기 때문입니다. 따라서 A::who() 가 아닌 B::who() 가 호출되었습니다. 만약 static::who() 가 아니라 self::who() 였다면 A::who() 가 호출되었을 것입니다. 이 과정에서 따라 B::test()->A::foo()->B::who() 가 호출되었으므로 출력은 A Foo, B Foo, B 순서로 나오게됩니다.
답변 1