Php 通过WordPress插件实现静态方法的自实例化类
我正在开发一个WordPress插件。我是PHP OOP新手,顺便说一句,通过遵循一个高级WordPress插件,采用了一种高级方法来实现。现在被困在某个地方。我可以回到程序化PHP,但如果我从现在开始,一切都不会改变 我理解我所做的,但可能是我遗漏了什么,这就是为什么我在寻找你对我的代码的非常直观的看法,我做错了什么 具有自实例化的主类 当我开始开发插件时,自实例化工作正常,我从它的属性(var)中获取所有值 我启用了Php 通过WordPress插件实现静态方法的自实例化类,php,wordpress,oop,Php,Wordpress,Oop,我正在开发一个WordPress插件。我是PHP OOP新手,顺便说一句,通过遵循一个高级WordPress插件,采用了一种高级方法来实现。现在被困在某个地方。我可以回到程序化PHP,但如果我从现在开始,一切都不会改变 我理解我所做的,但可能是我遗漏了什么,这就是为什么我在寻找你对我的代码的非常直观的看法,我做错了什么 具有自实例化的主类 当我开始开发插件时,自实例化工作正常,我从它的属性(var)中获取所有值 我启用了寄存器\u激活\u hook()和其他include的过程编码。但是当我使用
寄存器\u激活\u hook()
和其他include的过程编码。但是当我使用final
类实现它们时,它们停止了工作
something()
,然后简单地在某处调用它something()代码>包括工作正常
注册\u激活\u hook()
是否正确用
XYZ\u Install
修复了一个键入错误NS\u Install
,我不确定您的问题是什么。由于您将关键字final
添加到类Xyz
中,因此无法再初始化该类?该类可以初始化,但不能再由其他类扩展。但我不认为这是问题所在。什么是NS\u安装
?看起来您假设XYZ_Install::Install()
是静态的?
<?php
if ( ! class_exists( 'Xyz' ) ) :
final class Xyz {
/**
* Xyz version.
* @var string
*/
public $version = '1.0.0';
/**
* @var Xyz The single instance of the class
*/
protected static $_instance = null;
/**
* Main Xyz Instance.
*
* Ensures only one instance of Xyz is loaded or can be loaded.
*
* @static
* @see XYZ()
* @return Xyz - Main instance
*/
public static function instance() {
if ( is_null( self::$_instance ) ) {
self::$_instance = new self();
}
return self::$_instance;
}
public function __construct() {
$this->define_constants();
$this->xyz_includes();
$this->init();
}
/**
* Define constant if not yet set.
*
* @param string $name
* @param string|bool $value
*/
private function xyz_define( $name, $value ) {
if ( ! defined( $name ) ) {
define( $name, $value );
}
}
/**
* Define necessary constants
*/
private function define_constants() {
$this->xyz_define( 'XYZ_PLUGIN_FILE', __FILE__ );
$this->xyz_define( 'XYZ_PLUGIN_BASENAME', plugin_basename( __FILE__ ) );
}
/**
* Include additional files
*/
public function xyz_includes() {
/** Classes **/
include_once( 'includes/class-xyz-install.php' );
/** Core Functions **/
include_once( 'includes/xyz-core-functions.php' );
//...and so on...
}
public function init() {
register_activation_hook( __FILE__, array('XYZ_Install', 'install') );
add_action( 'init', array( $this, 'xyz_load_textdomain' ), 1 );
}
/**
* Make the plugin translation-ready.
*/
public function xyz_load_textdomain() {
load_plugin_textdomain(
'xyz',
false,
dirname( plugin_basename( __FILE__ ) ) .'/languages/'
);
}
}
endif;
/**
* Returns the main instance of Xyz to prevent the need to use globals.
* @return XYZ
*/
function XYZ() {
return Xyz::instance();
}
<?php
class XYZ_Install {
public static function init() {
add_filter( 'plugin_action_links_'. XYZ_PLUGIN_BASENAME, array( __CLASS__, 'plugin_settings_link' ) );
}
public static function plugin_settings_link( $links ) {
//$links = existing links + made up link
return $links;
}
public function install() {
delete_option( 'xyz_version' );
add_option( 'xyz_version', XYZ()->version );
xyz_register_cpt_xyz();
flush_rewrite_rules( false );
}
}
XYZ_Install::init();