当涉及到oop方式时,您需要的不仅仅是类,如果希望启动操作,您还需要在某个时候将其实例化为对象。
class myClass{
function __construct(){
add_action( \'init\', array( $this, \'someFun\' ) );
}
function someFun(){
include( \'my-script.php\' );
}
}
//instantiate an instance of myClass
new myClass();
然后,在我的脚本中。php,
class anotherClass{
function __construct(){
add_action( \'wp\', array( $this, \'moreFun\' ) );
}
function moreFun(){
//do something.
}
}
除了包含
anotherClass
. 更有趣的是,不会调用函数;其他事情都不会发生。
为了让它在wp中更加有趣,您还必须实例化另一个类,例如。
function someFun(){
include( \'my-script.php\' );
new anotherClass();
}
然而,这有什么意义呢?为什么要包含我的脚本。php在someFun中,当您可以在一开始就包含它,而不冒在其他地方丢失它的风险时?
我认为这样做的唯一原因是,如果你想对另一个类有不止一个定义(这通常是很糟糕的做法)。
最好这样做:
class pluginRootClass{
function __construct(){
//include all your class definitions
include( \'my-script.php\' );
include( \'scripty.php\' )
//then do your actions
add_action( \'init\', array( $this, \'someFun\' ) );
}
function someFun(){
new anotherClass();
}
}
//instantiate an instance of pluginRootClass
new pluginRootClass();
这样做效果更好,因为不可能意外地
$x = new anotherClass();
由于操作“init”(或任何操作)尚未激发而未定义其他类,因此破坏了一切。
此外,对于pluginRootClass,它有被多次实例化的风险。因此多次调用\\uu构造函数,从而多次包含相同的类定义,从而导致错误。因此,最好通过制作一个pluginRootClass的单例来阻止这种情况的发生。
function myPlugin(){
//If object already exists return it, if not create it, save it and return it
if( ! ( $ob = wp_cache_get( \'root\', \'plugin-namespace\' ) ) ){
$ob = new pluginRootClass();
wp_cache_set( \'root\', $ob, \'plugin-namespace\' );
}
return $ob;
}
myPlugin();
然后仅使用函数myPlugin调用该类。