PHP Как самостоятельно объявить родительской функцией в дочернем классе? - PullRequest
0 голосов
/ 06 июня 2018

Parent

class MWCEMod {
  private static $mod;

  public function get_mod(){
    var_dump( self );
    if ( null == self::$mod )
        self::$mod = new MWCEMod();
    return self::$mod;
  }
  private function __construct(){
    var_dump('something1');
  }
}

Child

class MWCEMod_child extends MWCEMod{
  private function __construct(){
    var_dump('something2');
  }
}
add_action( 'MWCE_Load_Mods', array('MWCEMod_acf','get_mod') );

Я хотел бы изменить код выше, чтобы MWCEMod_child::get_mod() вызывал self::$mod = new MWCEMod_child();, а не self::$mod = new MWCEMod();.Есть ли способ сделать это?

Я пытаюсь изучить PHP на Создание Wordpress плагин.Это модули для основного класса, и я загружаю их следующим образом:

class MonWayContentEditor {

private static $instance;
private $options;

public  $plugin_url,
        $plugin_dir;

public static function get_instance() {
    if( get_current_user_id() == 2 ){
        if ( self::$instance == null )
            self::$instance = new MonWayContentEditor();
        return self::$instance;
    }
    return null;
}
private function __construct(){
    $this->options = array(

    );

    $this->plugin_url = plugins_url().'/monway-editor/';
    $this->plugin_dir = plugin_dir_path( __FILE__ );

    $this->load_modules();

    do_action( 'MWCE_Load_Mods');
}

private function load_modules(){
    include($this->plugin_dir.'/mods/MWCEMod.php');

    if(class_exists('acf'))
        include($this->plugin_dir.'/mods/acf.php');
}

}
add_action( 'plugins_loaded', array( 'MonWayContentEditor', 'get_instance' ) );

Я не знаю, как объяснить это лучше.

1 Ответ

0 голосов
/ 06 июня 2018

Кажется, что главное - создать экземпляр производного класса, а не базового класса.Я изменил код, чтобы позволить мне показать принцип использования get_called_class(), а затем использовать это имя для создания объекта.

class MWCEMod {
    private static $mod;

    public function get_mod(){
        if ( null == self::$mod )
            $className = get_called_class();
            self::$mod = new $className();
            return self::$mod;
    }
    private function __construct(){
        var_dump('something1');
    }
}

class MWCEMod_child extends MWCEMod{
    public function __construct(){
        var_dump('something2');
    }
}

$n = new MWCEMod_child();
print_r($n->get_mod());

Этот код выводит ...

.../Test/t1.php:21:
string(10) "something2"
.../Test/t1.php:21:
string(10) "something2"
MWCEMod_child Object
(
)
...