아니요, 직접적으로가 아니라 후크를 통해 클래스를 '초기화'하거나 인스턴스화 할 수 없습니다. 몇 가지 추가 코드가 항상 필요합니다. 웜 캔을 직접 열 때이를 수행하는 것은 바람직하지 않습니다.
더 좋은 방법은 다음과 같습니다.
class MyClass {
function __construct() {
add_action( 'admin_init',array( $this, 'getStuffDone' ) );
}
function getStuffDone() {
// .. This is where stuff gets done ..
}
}
$var = new MyClass();
물론 일반적인 경우를 위해 인터페이스 클래스를 만들어 더 단순화 할 수 있습니다.
class IGetStuffDone {
function IGetStuffDone(){
add_action( 'admin_init',array( $this, 'getStuffDone' ) );
}
public abstract function getStuffDone();
}
인터페이스로서이 유형의 객체를 직접 만들 수는 없지만 하위 클래스를 만들면 다음과 같이 말할 수 있습니다.
class CDoingThings extends IGetStuffDone {
function getStuffDone(){
// doing things
}
}
$var = new CDoingThings();
그러면 모든 후크가 자동으로 추가되므로 서브 클래스에서 정확히 수행되는 작업을 정의한 후 작성하면됩니다.
생성자
나는 생성자를 후크 함수로 추가하지 않을 것이고, 나쁜 습관이며, 많은 비정상적인 이벤트를 일으킬 수 있습니다. 또한 대부분의 언어에서 생성자는 인스턴스화되는 객체를 반환하므로 후크가 필터와 같은 것을 반환 해야하는 경우 원하는대로 필터링 된 변수를 반환하지 않지만 대신 클래스 객체를 반환합니다.
생성자 또는 소멸자를 호출하는 것은 어떤 언어를 사용하든 절대 수행 해서는 안되는 프로그래밍 습관 입니다.
또한 생성자는 실제 작업이 아닌 사용 준비를 초기화하기 위해 객체를 구성해야합니다. 객체에 의해 수행되는 작업은 별도의 기능이어야합니다.
정적 클래스 메서드이며 인스턴스화 / 초기화가 필요하지 않습니다
클래스 메소드가 정적 클래스 메소드 인 경우 $this
아래 표시된 것처럼 클래스 이름을 따옴표로 묶을 수 있습니다.
class MyClass {
public static function getStuffDone() {
// .. This is where stuff gets done ..
}
}
add_action( 'admin_init', array('MyClass','getStuffDone' ) );
클로저 및 PHP 5.3
슬프게도 새로운 클래스를 만드는 선을 피할 수는 없습니다. 이것을 건너 뛸 수있는 유일한 다른 해결책은 여전히 해당 라인을 가진 보일러 플레이트 코드를 포함하며 PHP 5.3 이상이 필요합니다.
add_action('admin_init',function(){
$var = new MyClass();
$var->getStuffDone();
});
어느 시점에서 클래스를 건너 뛰고 함수를 사용할 수 있습니다.
add_action('admin_init',function(){
// do stuff
});
그러나 이제 익명 함수의 스펙터를 소개했습니다. 를 사용하여 위의 작업을 제거 할 수있는 방법이 없으며 remove_action
, 이는 다른 사람의 코드로 작업해야하는 개발자에게 큰 고통을 줄 수 있습니다.
앰퍼샌드
다음과 같이 사용 된 조치가 표시 될 수 있습니다.
array( &$this, 'getStuffDone' );
이것은 나쁘다 . &
객체가 참조가 아닌 값으로 전달 될 때 PHP 4에서 다시 추가되었습니다. PHP 4는 10 년이 넘었으며 WordPress에서 오랫동안 지원하지 않았습니다.
후크와 필터를 추가 할 때 사용할 이유 가 없으며&this
참조를 제거해도 아무런 문제가 없으며 향후 PHP 버전과의 호환성을 향상시킬 수 있습니다
대신 이것을 사용하십시오 :
array( $this, 'getStuffDone' );