programing

클래스 내에서 정적 메서드를 호출할 수 있습니까?

copysource 2023. 1. 14. 10:34
반응형

클래스 내에서 정적 메서드를 호출할 수 있습니까?

같은 클래스 내의 다른 메서드에서 정적 메서드를 호출하려면 어떻게 해야 합니까?

$this->staticMethod();

또는

$this::staticMethod();
self::staticMethod();

Static 키워드의 상세.

이것이 당신의 수업이라고 가정해 봅시다.

class Test
{
    private $baz = 1;

    public function foo() { ... }

    public function bar() 
    {
        printf("baz = %d\n", $this->baz);
    }

    public static function staticMethod() { echo "static method\n"; }
}

내부로부터foo()다양한 옵션을 살펴보겠습니다.

$this->staticMethod();

그래서 전화는staticMethod()인스턴스 방식이죠?아니다.이는 메서드가 다음과 같이 선언되기 때문입니다.public static인터프리터는 그것을 정적 방식이라고 부르기 때문에 예상대로 동작합니다.이렇게 하면 정적 메서드 호출이 발생하는 것이 코드에서 덜 명확해진다고 주장할 수 있습니다.

$this::staticMethod();

PHP 5.3을 사용할 수 있습니다.$var::method()의미하다<class-of-$var>::이것은 매우 편리합니다만, 상기의 유스케이스는 아직 매우 이례적입니다.이를 통해 스태틱 메서드를 호출하는 가장 일반적인 방법이 제시됩니다.

self::staticMethod();

이제, 당신이 생각하기 전에::는 스태틱콜 오퍼레이터입니다또 다른 예를 제시하겠습니다.

self::bar();

이것은 인쇄됩니다.baz = 1즉,$this->bar()그리고.self::bar()똑같은 일을 하다::는 스코프 해결 연산자일 뿐입니다.그것은 만들기 위해 있다parent::,self::그리고.static::는, 스태틱 변수에의 액세스를 제공합니다.메서드의 호출 방법은, 그 시그니처와 발신자의 호출 방법에 의해서 다릅니다.

이 모든 것이 동작하고 있는 것을 확인하려면 , 다음의 3v4l.org 의 출력을 참조해 주세요.

이는 매우 늦은 응답이지만 이전 답변에 대한 자세한 내용을 추가합니다.

같은 클래스의 다른 정적 메서드에서 PHP의 정적 메서드를 호출할 때는 두 메서드를 구별하는 것이 중요합니다.self클래스명을 지정합니다.

다음 코드를 예로 들 수 있습니다.

class static_test_class {
    public static function test() {
        echo "Original class\n";
    }

    public static function run($use_self) {
        if($use_self) {
            self::test();
        } else {
            $class = get_called_class();
            $class::test(); 
        }
    }
}

class extended_static_test_class extends static_test_class {
    public static function test() {
        echo "Extended class\n";
    }
}

extended_static_test_class::run(true);
extended_static_test_class::run(false);

이 코드의 출력은 다음과 같습니다.

오리지널 클래스

확장 클래스

그 이유는self는, 호출원코드의 클래스가 아니고, 코드가 속해 있는 클래스를 나타냅니다.

원래 클래스를 상속하는 클래스에 정의된 메서드를 사용하려면 다음과 같은 방법을 사용해야 합니다.

$class = get_called_class();
$class::function_name(); 

이후 PHP 버전에서는self::staticMethod();또, 동작하지 않습니다.그것은 엄격한 표준 오류를 던질 것이다.

이 경우 동일한 클래스의 개체를 생성하여 개체별로 호출할 수 있습니다.

여기 예가 있다

class Foo {

    public function fun1() {
        echo 'non-static';   
    }

    public static function fun2() {
        echo (new self)->fun1();
    }
}

클래스 내의 정적 메서드를 호출하다

className::staticFunctionName

ClassName::staticMethod();

언급URL : https://stackoverflow.com/questions/2204018/call-a-static-method-inside-a-class

반응형