>백엔드 개발 >PHP 튜토리얼 >초보자가 수업에 대해 질문이 있습니다.

초보자가 수업에 대해 질문이 있습니다.

WBOY
WBOY원래의
2016-09-15 11:31:001190검색

클래스에서 메소드를 호출하는 다음 두 가지 방법의 차이점은 무엇인가요?

1

<code>class MyClass {
    public function myfunc() {
        // ...
    }
}

$myclass = new MyClass;
$myclass->myfunc();</code>

2

<code>class MyClass {
    public static function myfunc() {
        // ...
    }
}

MyClass::myfunc();</code>

하나는 먼저 인스턴스화한 후 호출하는 방법이고, 다른 하나는 정적 메서드를 직접 선언하고 직접 호출하는 방법입니다. 이 둘의 차이점은 무엇인가요? 어떤 상황에서 사용해야 합니까?

답글 내용:

클래스에서 메소드를 호출하는 다음 두 가지 방법의 차이점은 무엇인가요?

1

<code>class MyClass {
    public function myfunc() {
        // ...
    }
}

$myclass = new MyClass;
$myclass->myfunc();</code>

2

<code>class MyClass {
    public static function myfunc() {
        // ...
    }
}

MyClass::myfunc();</code>

하나는 먼저 인스턴스화한 후 호출하는 방법이고, 다른 하나는 정적 메서드를 직접 선언하고 직접 호출하는 방법입니다. 이 둘의 차이점은 무엇인가요? 어떤 상황에서 사용해야 합니까?

대중적인 이해는 다음과 같습니다.

첫 번째는 $this->a; self::$a; static::$a; $this->a(); self::a(); static::a() 및 기타 방법을 사용하여 현재 클래스의 관련 데이터 및 방법을 얻을 수 있습니다

두 번째 방법은 self::$a; static::$a; self::a(); static::a() 및 기타 방법만 사용하여 관련 정적 데이터와 현재 클래스의 정적 메서드를 얻을 수 있습니다

현재 객체가 인스턴스화되지 않았기 때문에

static에서는 이를 사용할 수 없습니다.

객체 a)에 유틸리티 메서드가 있고 b) 객체의 인스턴스에 의존하지 않는 경우 정적 메서드가 가장 적합합니다.

그러나 실제 개발에서는 a) 가중치가 더 높습니다. 즉, 실제로 널리 사용되는 도구 방법의 경우 개발자는 이를 정적으로 만들기 위해 다양한 방법을 사용할 수 있습니다.

<code>public static function getTotal(array $numbers) {
    $self = new self();
    return $self->getTotalNumber($numbers);
}</code>

전화할 때 코드 몇 줄만 저장하면 됩니다. 좋은지 나쁜지는 중요하지 않고 상황에 따라 다릅니다.

또한 싱글톤 모드 객체에서는 정적 메서드가 더 일반적입니다. 근본 원인은 위와 동일하므로 자세히 설명하지 않겠습니다.

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.