developer tip

PHP에서 self :: $ bar와 static :: $ bar의 차이점은 무엇입니까?

optionbox 2020. 8. 4. 07:31
반응형

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. 당신이 사용하는 경우 selfFoo속성을 참조하는 클래스, 같은 클래스를 참조하고 있습니다.

따라서 클래스의 self::$bar다른 곳에서 사용하려고했지만 속성 값이 다른 클래스가 있으면 대신 대신 사용하게 되며 이는 의도 한 것과 다를 수 있습니다.FooBarFoo::$barBar::$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런타임에 바인딩 된 생성자를 호출하기위한 키워드는이 관련된 질문에서 찾을 수 있습니다 새로운 정적 대 새로운 자아를

그러나 staticwith 속성도 사용할 수는 없습니다 .

참고 URL : https://stackoverflow.com/questions/11710099/what-is-the-difference-between-selfbar-and-staticbar-in-php

반응형