我有一个关于WordPress中的register_activation_hook的问题。让我举个例子。比方说……
主插件文件:
//main_plugin_file.php
register_activation_hook( __FILE__, 'activate' );
function activate(){
require_once plugin_dir_path( __FILE__ ) . 'classes/class-config.php';
$config = new config();
$config->activate_function();
}类文件:
//class-config.php
class config {
public function __construct(){
add_action( 'query_vars', array( $this, 'sample_one' ) );
add_filter( 'init', array( $this, 'sample_two' ) );
add_action( 'wp_loaded', array( $this, 'sample_three' ) );
}
public function activate_function(){
$this->insert_user_into_database();
}
public function insert_user_into_database (){
//execution code here....
}我的问题是,一旦我激活了这个插件,Config类中的__construct函数也会运行吗?还是"activate_function“中的函数运行?,哪个先运行?我很困惑,因为我有一个$config = new config();,每当有一个“新的”关键字时,__construct函数就会自动运行。请帮我理解一下。
谢谢
发布于 2018-03-16 01:37:14
根据您的main_plugin_file.php代码:
activate()将在插件被激活时运行,这是由于您在class-config.php文件中加载了register_activation_hook config类还没有被调用/实例化-它只是被调用/实例化-它是纯defined.的
$config = new config();时,将在此处实例化类,此时将运行__construct函数run.$config->activate_function();。如果您注释掉这行// $config = new config();,那么__construct函数将永远不会运行,因为当您require class-config.php文件时,它实际上并没有运行内部函数。类仅在您调用它们时运行,例如$var = new Class();,而不是在定义它们时运行。
它类似于这个基本的函数示例,这个文件:
<?php function foo(){
echo 'bar';
} ?>将永远不会输出任何内容,因为函数foo已经定义,但是直到我们稍后调用foo()它才会运行。
这是一个简单的沙盒函数,你只能看到它回显一次,因为我们定义了类,但在我们通过调用new MyClass()实例化它之前什么都不会发生:
Sandbox Link
https://stackoverflow.com/questions/49305571
复制相似问题