Php 通过WordPress插件实现静态方法的自实例化类

Php 通过WordPress插件实现静态方法的自实例化类,php,wordpress,oop,Php,Wordpress,Oop,我正在开发一个WordPress插件。我是PHP OOP新手,顺便说一句,通过遵循一个高级WordPress插件,采用了一种高级方法来实现。现在被困在某个地方。我可以回到程序化PHP,但如果我从现在开始,一切都不会改变 我理解我所做的,但可能是我遗漏了什么,这就是为什么我在寻找你对我的代码的非常直观的看法,我做错了什么 具有自实例化的主类 当我开始开发插件时,自实例化工作正常,我从它的属性(var)中获取所有值 我启用了寄存器\u激活\u hook()和其他include的过程编码。但是当我使用

我正在开发一个WordPress插件。我是PHP OOP新手,顺便说一句,通过遵循一个高级WordPress插件,采用了一种高级方法来实现。现在被困在某个地方。我可以回到程序化PHP,但如果我从现在开始,一切都不会改变

我理解我所做的,但可能是我遗漏了什么,这就是为什么我在寻找你对我的代码的非常直观的看法,我做错了什么

具有自实例化的主类 当我开始开发插件时,自实例化工作正常,我从它的属性(var)中获取所有值

我启用了
寄存器\u激活\u hook()
和其他include的过程编码。但是当我使用
final
类实现它们时,它们停止了工作

  • 这些包不起作用。如果我给它们一个过程函数
    something()
    ,然后简单地在某处调用它
    something()包括工作正常
  • 我不确定类中我的
    注册\u激活\u hook()
    是否正确
  • 我很想从我的错误中学习PHP OOP。如蒙协助,将不胜感激

    编辑20180107
    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();