반응형
PHP에서 self :: $ bar와 static :: $ bar의 차이점은 무엇입니까?
아래 예제 self
와 사용시 차이점은 무엇입니까 static
?
class Foo
{
protected static $bar = 1234;
public static function instance()
{
echo self::$bar;
echo "\n";
echo static::$bar;
}
}
Foo::instance();
생산
1234
1234
당신이 사용하는 경우 self
클래스 멤버를 참조 할, 당신은 당신이 키워드를 사용하는 내부 클래스를 참조하고 있습니다. 이 경우 Foo
클래스는이라는 보호 된 정적 속성을 정의합니다 $bar
. 당신이 사용하는 경우 self
의 Foo
속성을 참조하는 클래스, 같은 클래스를 참조하고 있습니다.
따라서 클래스의 self::$bar
다른 곳에서 사용하려고했지만 속성 값이 다른 클래스가 있으면 대신 대신 사용하게 되며 이는 의도 한 것과 다를 수 있습니다.Foo
Bar
Foo::$bar
Bar::$bar
class Foo
{
protected static $bar = 1234;
}
class Bar extends Foo
{
protected static $bar = 4321;
}
를 사용할 때 늦은 정적 바인딩 (PHP 5.3에서 도입) static
이라는 기능을 호출합니다 .
위의 시나리오에서 사용하는 static
대신하여 self
발생합니다 Bar::$bar
대신에 사용되는 Foo::$bar
인터프리터가 다음 계정으로 내 재 선언이 걸리기 때문에, Bar
클래스를.
하위 클래스에서 속성을 자주 다시 선언하지 않기 때문에 일반적으로 속성보다는 메서드 나 클래스 자체에 대해 늦은 정적 바인딩을 사용합니다. 사용하는 예제 static
런타임에 바인딩 된 생성자를 호출하기위한 키워드는이 관련된 질문에서 찾을 수 있습니다 새로운 정적 대 새로운 자아를
그러나 static
with 속성도 사용할 수는 없습니다 .
반응형
'developer tip' 카테고리의 다른 글
socket.io 및 nodejs를 사용하여 서버에서 클라이언트 연결 끊기 (0) | 2020.08.04 |
---|---|
분산 워크 플로를위한 git의 "간단한"vs "현재"push.default (0) | 2020.08.04 |
2 차원 배열에 대한 포인터 만들기 (0) | 2020.08.04 |
Delphi 언어 기능 및 소개 / 비추천 된 버전 목록 (0) | 2020.08.04 |
C ++ SFINAE 예제? (0) | 2020.08.04 |