functions.php에서 전역 함수 대신 클래스 사용


11

내가 본 많은 주제 (TwentyEleven 포함)와 온라인에서 찾은 예제 functions.php에서 주제에 대한 파일을 빌드 할 때 모든 기능이 전체 범위로 선언됩니다. 명확히하기 위해 다음은 일반적인 함수 파일의 모습입니다.

function my_theme_do_foo() { // ... }

function my_theme_do_bar() { // ... }

add_action( 'foo_hook', 'my_theme_do_foo' );

클래스가 사용되면 상황이 조금 더 잘 캡슐화 될 수있는 것처럼 보입니다.

class MyTheme {
    function do_foo() { // ... }
    function do_bar() { // ... }
}

$my_theme = new MyTheme();

add_action( 'foo_hook', array( &$my_theme, 'do_foo' ) );

두 번째 접근법의 장점 (내 겸손한 눈에서) :

  • 더 짧은 기능 이름
  • 인스턴스 변수에 대한 액세스 (가장 큰 장점 IMO)
  • 글로벌 기능 없음

단점 :

  • 클래스 이름은 여전히 ​​충돌을 일으킬 수 있습니다
  • 자식 테마로 "사용자 정의"하는 것이 명확하지 않습니다 (부모 클래스를 확장해야 함)
  • 대부분의 테마는 이런 식으로하지 않았으므로 트렌드를 버리고있을 것입니다

아마도 몇 가지 사항을 간과하지만 OOP 방식을 사용하지 않는 이유가 궁금합니다. 그것은 나에게 조금 더 깨끗하다고 ​​느낀다. 내가 틀렸을 까?

나는 WordPress 테마 개발에 익숙하지 않으므로 이것이 WP 커뮤니티에서 일반적인 지식이라면 용서하십시오 :). 왜 사물이 왜 그런지 배우려고 노력했습니다.


- 당신은 Kovshenin에서 테마를 확인할 수 있습니다 wordpress.org/extend/themes/profile/kovshenin 그는 functions.php에서 OOP 방식을 사용
Mamaduka

답변:


9

캡슐화를 위해 클래스를 사용하는 것은 플러그인 개발자들에 의해 매우 일반적인 접근 방식입니다. 나는 이것을하고 더 깨끗하게 찾을 수 있습니다. 그러나 플러그인의 경우. 테마는 본질적으로 더 절차 적입니다.

기본 워드 프레스 테마는 진입 장벽을 높이기 때문에이를 수행하지 않습니다. 기능은 매우 간단합니다. 클래스에 묶인 액션을 제거하는 것은 어려울 수 있습니다 (특정 상황에서는 버그가 발생할 수 있음).

또한 기본 테마의 여러 ​​기능을 플러그인 할 수 있습니다. 클래스를 확장하고 메소드를 교체하는 것은 단순히 함수를 정의하는 것보다 훨씬 복잡합니다. 코드의 두 가지 측면이 다른 함수를 대체 할 수 있지만 클래스를 동적으로 확장 할 수는 없습니다. 지적했듯이 부모 클래스를 확장해야한다는 것은 분명히 단점입니다.

나는 Twenty Eleven의 테마 옵션 코드를 클래스로 만드는 것을 고려했지만 결코 그 주위를 돌아 보지 않았습니다. 이러한 종류의 개별 플러그인과 같은 기능은 캡슐화의 좋은 후보처럼 보입니다.


답변 주셔서 감사합니다, Nacin. 나는 수업에서 "후킹 해제"동작의 어려움에 대해 생각하지 않았다. 옵션 캡슐화에 대해서 - 우리는 같은 일을 생각해 봤는데 : github.com/jestro/struts
앤디 아담스
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.