2013-05-14 8 views
0

나는 모든 Wordpress 플러그인에서 사용할 보일러 플레이트 클래스를 만들고 있습니다. (MOD는 "보일러 판"이 이것을 부르는 올바른 방법이 아니라면 편집 할 수 있습니다.) 나는 내 모든 플러그인과 코드 전체에서 사용하는 상수를 가지고 있으므로 올바른 이름을 찾는 방법을 찾고있다.상용구 클래스의 이름 지정

//edit these 
define('WPB_PREFIX'      , 'wsm'); 
define('WPB_SLUG'       , 'wp-simple-monitor'); // Need to match plugin folder name 
define('WPB_PLUGIN_NAME'     , 'WP Simple Monitor'); 
define('WPB_VERSION'      , '1.0'); 
//dont edit 
define(WPB_PREFIX.'_ABS_PATH'    , WP_PLUGIN_DIR . '/'. WPB_SLUG   ); 
define(WPB_PREFIX.'_REL_PATH'    , dirname(plugin_basename(__FILE__))   ); 
define(WPB_PREFIX.'_PLUGIN_URL'   , WP_PLUGIN_URL . '/'. WPB_SLUG   ); 

class WP_Plugin_Base 
    { 
    // ... 
    _e('Settings', WPB_PREFIX); 
    // ... 
    } 

그래서 내 모든 코드를 통해 예를 들어 내가 좋아하는 그것을 사용 : 내 코드에서

나는이이

내가이 플러그인을 사용하여 최종면
<?php _e('Settings', WPB_PREFIX);?> 

지금까지 모든 것이 좋아하지만, 동일한 프로젝트에서 이미 모든 코드를 확인하고 "WPB_PREFIX"를 변경해야합니다. 모든 코드를 포기하지 않고이 작업을 수행하는 쉬운 방법이 있습니까?

감사

+1

[define()'] (http://www.php.net/manual/en/function.defined.php) 기능을 찾는 것처럼 보입니다. 아니? '$ x = defined ('WPB_PREFIX')? WPF_PREFIX : 'default'; ' – BlitZ

+0

아래 나의 답변 외에도, 들여 쓰지 않은 중괄호 인 표준 PHP 코드 스타일을 따르도록 강력히 권합니다. ;) –

답변

2

당신은 (그리고!해야합니다) 대신 전역 상수의 class properties로 정의 할 수있다. 당신은 당신에 대한 액세스를 필요로하는 상수에 대한 기본값을 설정하는 기본 클래스를 다음 클래스 확장 할 수 있습니다 : 새로운 슬러그와

class WP_Plugin_Base 
{ 
    protected $wpbPrefix = 'wsm'; 
    protected $wpbSlug = 'wp-simple-monitor'; 
    // etc. 
} 

class WP_Plugin_Specific extends WP_Plugin_Base 
{ 
    protected $wpbSlug = 'wp-plugin-specific'; 

    function someMethod() { 
     _e('Settings', self::wpbPrefix); 
     _e('Slug', self::wpbSlug); 
    } 
} 

원래의 접두사 것 후자 클래스의 메소드의 출력을, . noted in the comments, 당신은 예를 들어, 연결된 조각 일을 정의 할 수하기 위해 보호 변수가 아니라 클래스 상수가 필요합니다 : 당신이 필요로하는 특정 클래스를 사용할 때마다

protected $absPath = WP_PLUGIN_DIR . '/' . $wpbSlug; 
protected $relPath = dirname(plugin_basename(__FILE__)); 
protected $pluginUrl = WP_PLUGIN_URL . '/' . $wpbSlug; 

그 방법은, 당신이 얻을 모든 혜택은 이미 갖고있는 일반 수업에서 얻고있는 것이지만 교차 문제는 없습니다.

이 또한 이미 정의되어있는 경우 을 무엇을 알아 내려고 노력에서 당신을 방지하고, 그것은 또한 의미가 있습니다 때마다, 당신은 수있는 장소에 기본값을 떠날 것을 의미한다 : self::property이 경우 기본 클래스의 속성을 검색합니다 당신은 그것을 오버라이드하지 않았습니다. 그렇게하면 원하는 모든 것을 얻을 수있을뿐만 아니라 전역 네임 스페이스를 혼란스럽지 않게 할 수 있습니다.

+1

그래, 아마 맞을거야. 이것이 가장 적합합니다. 상수 덮어 쓰기 문제도 다루고 있습니다. – BlitZ

+1

그러나 클래스에 관계없이'WBP_PREFIX'가 사용될 수있는 문제가 있습니다. 'define ('WBP_PREFIX', 'wsm'); class Settings {const OWN_WBP_PREFIX = WBP_PREFIX; }'. – BlitZ

+0

사실, 수업을 현명하게 사용한다면 중요하지 않습니다. 'classInstance-> WPB_PREFIX', * 아니다 *'WP_Plugin_Specific :: WPB_PREFIX'를해야합니다. 실제로 클래스를 인스턴스화하고 내부적으로 'self'를 참조하고 인스턴스를 외부 적으로 참조하는 한 아무런 문제가 없습니다. –