WP 플러그인에서 클래스를 자동로드하는 것이 좋은지 나쁜지 확실하지 않습니다. 나를 위해, 나는 spl_autoload_register
(테스트 성능이 아님) 사용의 부작용이 보이지 않습니다.
그래서 귀하의 질문에 대답하기 위해, 어떤 플러그인없이 단일 디렉토리에서 클래스를 자동로드하는 데 사용하는 예정된 플러그인에서 클래스를 공유하고 싶습니다.
/**
* Annframe Class Autoloader.
*
* @package Annframe
* @since 0.1.0
*/
class Annframe_Autoloader {
/**
* Singleton.
*
* @since 0.1.0
* @var Annframe_Autoloader - Single instance.
*/
private static $_instance = null;
/**
* Private Construct.
*
* @package Annframe
* @since 0.1.0
*/
private function __construct() {
spl_autoload_register( array( $this, 'load' ) );
}
/**
* Singleton method.
*
* @package Annframe
* @since 0.1.0
*/
public static function _instance() {
if ( ! self::$_instance ) {
self::$_instance = new Annframe_Autoloader();
}
return self::$_instance;
}
/**
* Class Loader.
*
* @package Annframe
* @since 0.1.0
*
* @param string $class_name - Class name to load.
* @return null - Do not return anything.
*/
public function load( $class_name ) {
$file = str_replace( '_', '-', strtolower( $class_name ) );
$file = 'class-' . $file;
if ( is_readable( trailingslashit( YOUR_PLUGIN_PATH. '/classes-dir' ) . $file . '.php' ) ) {
include_once trailingslashit( YOUR_PLUGIN_PATH. '/classes-dir' ) . $file . '.php';
}
return;
}
}
Annframe_Autoloader::_instance();
이 간단한 클래스를 부분적으로 나누려면 Singleton 패턴을 사용하고 있습니다. Constructor
은 비공개이며 instance()
& $_instance
는 패턴에 속합니다. 생성자는 spl_autoload_register
기능 이 있습니다.
spl_autoload_register( array( $this, 'load' ) );
load
자체 클래스에서 메소드를 호출 합니다. 이 방법의 첫 두 줄은 다음과 같습니다.
$file = str_replace( '_', '-', strtolower( $class_name ) );
$file = 'class-' . $file;
꽤 똑바로입니다. WPCS 를 따르는 경우 단어 class 접두사가 붙은 클래스 이름 지정 규칙을 따르고 클래스 이름을 따르는 것이 좋습니다 . 물론 밑줄 (_)은 (-) 대시로 바뀝니다.
그래서 클래스의 파일 이름이 WPSE_Post
될 것이다class-wpse-post.php
밑줄을 대시로 바꾸는 데 strtolower
사용하고 사용 str_replace
하는 낮은 케이싱 클래스 이름 그래서 WPSE_Post
지금이된다 wpse-post
. 마지막 class-
으로 다음 줄에 접두사 를 추가하십시오 .
is_readable
와 교환 가능한 조건문을 사용 하고 있습니다 file_exists
. 가정하면 YOUR_PLUGIN_PATH
플러그인의 기본 경로이며 classes-dir
자동로드가 필요한 모든 클래스를 보유하는 기본 플러그인 디렉토리에 있습니다.
include_once
호출시 실제 파일을로드하는 데 사용됩니다.
용법:
위의 자동 로더 클래스를 플러그인의 기본 파일에 포함시켜야합니다.
/**
* Class autoloader.
*/
if ( ! class_exists( 'Annframe_Autoloader' ) ) {
include_once YOUR_PLUGIN_PATH/class-annframe-autoloader.php';
}
그런 다음 필요에 따라 수업에 전화하십시오.
new XYX_Class();
Another_Class::instance(); // etc
참고 : 내 솔루션에서 네임 스페이스 메소드를 사용하지 않으므로 필요에 따라 맞지 않을 수도 있지만 누군가가 동적으로 클래스를로드 할 수있는 이점을 얻도록 여기에 게시되었습니다.
spl_autoload_register()
부작용없이 사용할 수 있습니다 .