클래스에서 메소드를 호출하는 다음 두 가지 방법의 차이점은 무엇인가요?
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>
전화할 때 코드 몇 줄만 저장하면 됩니다. 좋은지 나쁜지는 중요하지 않고 상황에 따라 다릅니다.
또한 싱글톤 모드 객체에서는 정적 메서드가 더 일반적입니다. 근본 원인은 위와 동일하므로 자세히 설명하지 않겠습니다.