[英]Call parent property from child class without parent::__construct
我有一個帶有公共屬性$options
的父類My_Admin
我有一個子類My_Notices
,需要訪問$options
屬性。
如果在子類中將parent::__construct()
放入子類的__construct()
,則我可以訪問$options
但它會復制父類的整個輸出。 換句話說,由於子類調用parent::_construct()
的實例化,我在同一頁面上獲得了兩個html頁面輸出。
我試過在子結構中聲明$options
,例如public function __construct($options)
但隨后它告訴我:
Warning: Missing argument 1 for My_Notices::__construct()
**編輯**
以下是這些課程的細分:
class My_Admin
{
private $sections;
protected $settings;
protected $defaults;
public $options;
public function __construct()
{
$this->settings = array();
$this->get_settings();
$this->defaults = array( /* stuff here */ );
$this->sections = array( /* stuff here */ );
add_filter('plugin_action_links', array($this, 'pluginpage'), 10, 2);
add_action('admin_menu', array($this, 'menu'));
add_action('admin_enqueue_scripts', array($this, 'enqueue'));
add_action('admin_init', array($this, 'deregister'), 20);
add_action('wp_ajax_my_save', array($this, 'save'));
if(!get_option('my_options')) $this->initialize();
$this->options = get_option('my_options');
}
}
class My_Notices extends My_Admin
{
public function __construct()
{
add_action('admin_notices', array($this, 'baseconfig'));
add_action('admin_init', array($this, 'baseignore'));
}
public function baseconfig(){
global $pagenow;
$uid = get_current_user_id();
/* I NEED TO ACCESS $options HERE */
if(!$this->options['base1'] || !$this->options['bs1name'])
{
if(!get_user_meta($uid, 'my_notice'))
{
}
}
}
}
何時,根據您的意見,您需要致電父母的無印刷品。 您需要使用ob_start
和ob_end_clean
,但是您應該查看您的邏輯是否正確,因為父級的類打印文本不是最好的。
class My_Notices extends My_Admin {
public __construct(){
ob_start(); // prevents prints.
parent::__construct();
ob_end_clean(); // clear the capture
// Your code here....
更新 :您還可以檢查它是否是父項,然后打印:
class My_Admin
{
private $sections;
protected $settings;
protected $defaults;
public $options;
public function __construct()
{
$this->settings = array();
$this->get_settings();
$this->defaults = array( /* stuff here */ );
$this->sections = array( /* stuff here */ );
if( !is_subclass_of($this, 'My_Admin' ) ) { // Is the parent
add_filter('plugin_action_links', array($this, 'pluginpage'), 10, 2);
add_action('admin_menu', array($this, 'menu'));
add_action('admin_enqueue_scripts', array($this, 'enqueue'));
add_action('admin_init', array($this, 'deregister'), 20);
add_action('wp_ajax_my_save', array($this, 'save'));
}
if(!get_option('my_options')) $this->initialize();
$this->options = get_option('my_options');
}
public function get_settings(){}
public function initialize(){}
}
class My_Notices extends My_Admin
{
public function __construct()
{
parent::__construct();
add_action('admin_notices', array($this, 'baseconfig'));
add_action('admin_init', array($this, 'baseignore'));
}
}
查看工作原理: http : //sandbox.onlinephpfunctions.com/code/e4ed5143244aaf0c57b29ff8487d911ab7cf99dd
為了避免重復創建,這可能是您必須采取的方法:
將它們添加到您的My_Admin類中:
使自己成為一個private static $self;
屬性。
在您的__construct()
方法中添加self::$self = &$this;
制作方法:
public static getInstance(){
return $self;
}
在My_Notices中,將其添加到需要訪問options屬性的位置:
$my_admin = My_Admin::getInstance();
$my_admin->options;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.