【问题标题】:PHP How to self declare by parent function in child class?PHP如何通过子类中的父函数自我声明?
【发布时间】:2018-11-16 08:16:41
【问题描述】:

父母

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');
  }
}

孩子

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();。有什么办法吗?

我正在尝试学习 oop 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' ) );

我不知道如何更好地解释它。

【问题讨论】:

    标签: php class oop php-7


    【解决方案1】:

    主要的事情似乎是创建派生类的实例而不是基类。我已经修改了代码,让我展示了使用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
    (
    )
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-05-28
      • 1970-01-01
      • 1970-01-01
      • 2020-12-24
      • 2014-06-09
      • 1970-01-01
      • 2013-07-30
      • 2018-02-15
      相关资源
      最近更新 更多