PHP에서 정적 방법과 비 정적 방법은 객체 지향 프로그래밍에서 두 가지 다른 방법입니다. 정적 메소드는 클래스 수준이며 호출 할 객체를 인스턴스화 할 필요가 없습니다. 이들은 종종 공통 클래스 관련 작업을 처리하는 데 사용되며 키워드 정적을 사용하여 식별됩니다. 비 정적 메소드는 인스턴스 레벨이며 객체 인스턴스를 통해 호출되어야하며 일반적으로 인스턴스 속성 및 기타 인스턴스 메소드를 작동하는 데 사용됩니다.
정적 메소드는 인스턴스 객체없이 클래스에서 정적 특성 및 정적 메소드에 직접 액세스 할 수 있습니다. 비 정적 메소드는 정적 특성 및 메소드에 액세스 할 수 있으며 $를 통해 인스턴스 속성 및 인스턴스 메소드에도 액세스 할 수 있습니다.
정적 메소드는 비 정적 특성 및 메소드에 액세스하기 위해 $ this를 사용할 수 없으므로 비 정적 메소드를 호출 해야하는 경우 다음 두 가지 방법을 사용할 수 있습니다.
인스턴스 객체 매개 변수를 정적 메소드로 전달 하고이 객체를 통해 비 정적 메소드를 호출하십시오.
class MyClass {
public $name = "John";
public function hello() {
echo "Hello, " . $this->name;
}
public static function accessNonStaticMethod($obj) {
$obj->hello();
}
}
$obj = new MyClass();
MyClass::accessNonStaticMethod($obj);
이 방법은 호출 중에 객체를 통과하는 데 달려 있으며, 이는 약간 번거 롭습니다.
정적 메소드에서 현재 클래스 객체를 직접 인스턴스화 한 다음 비 정적 메소드를 호출하십시오.
class MyClass {
public $name = "John";
public function hello() {
echo "Hello, " . $this->name;
}
public static function accessNonStaticMethod() {
$obj = new self();
$obj->hello();
}
}
MyClass::accessNonStaticMethod();
이 방법에는 외부 매개 변수가 필요하지 않으며 비교적 간단하지만 해당 시나리오가 제한되어 있습니다.
다음은 비 정적 방법을 호출하는 정적 메소드의 두 가지 구현을 보여주는 완전한 예입니다.
class MyClass {
public $name = "John";
public function hello() {
echo "Hello, " . $this->name;
}
public static function accessNonStaticMethod() {
$obj = new self();
$obj->hello();
// 객체 호출을 통과 할 수도 있습니다
// $obj = new self();
// self::accessNonStaticMethod($obj);
}
}
MyClass::accessNonStaticMethod();
정적 메소드 내에서 비 정적 메소드 에 액세스하는 데 사용될 수 없으며 비 정적 메소드를 호출 할 때 객체 인스턴스를 지원해야합니다.
정적 방법과 비 정적 방법은 PHP 객체 지향 프로그래밍의 중요한 구성 요소입니다. 정적 메소드는 정적 멤버를 직접 호출 할 수 있지만 비 정적 메소드는 인스턴스 객체에 의존합니다. 비 정적 메소드에 액세스하는 정적 메소드는 인스턴스 또는 내부 인스턴스화 객체를 전달하여 구현해야하며 $이를 직접 사용할 수 없습니다. 실제 개발에서는 호출 방법을 합리적으로 선택하고 코드를 명확하게 유지하고 유지하는 것이 중요합니다.