PHP函数在另一个函数[类]中
我有下面的代码,在一个类中执行一个全局函数来填充wordpress的函数,问题是我能得到一个变量公共类的唯一方法如下PHP函数在另一个函数[类]中,php,wordpress,Php,Wordpress,我有下面的代码,在一个类中执行一个全局函数来填充wordpress的函数,问题是我能得到一个变量公共类的唯一方法如下 class Core { public $notice; function __construct(){ $this->core_function(); } function core_function(){ global $globalvar; $globalvar = $this; function notice_global(){
class Core {
public $notice;
function __construct(){
$this->core_function();
}
function core_function(){
global $globalvar;
$globalvar = $this;
function notice_global(){
global $globalvar;
return $globalvar->notice;
}
}
function set_notice(){
$this->notice = array('Warning');
}
}
$GP = new Core();
$GP->set_notice();
var_dump(notice_global());
任何其他想法或建议,此代码是否正确?我不确定是否正确理解您的意思,但请注意,可以将\u global移出该类
global的作用域在类之外我不确定是否理解正确,但请注意,global可以移出该类
全局函数的作用域在类之外不需要这些函数。您已将
$notice
定义为公共属性。您可以这样访问它:$GP->notice
您可能还想了解方法和属性的可见性。不需要这些函数。您已将
$notice
定义为公共属性。您可以这样访问它:$GP->notice
您可能还想了解方法和属性的可见性。正如您在评论中所说的,由于wordpress钩子方法(我想对于插件),您需要全局函数 这不是必需的:有一种方法可以将对象方法(而不是整个对象)传递给wordpress 您可以这样尝试:
class Core {
public $notice;
function get_notice()
{ return $this->notice; }
function set_notice()
{ $this->notice = array('Warning'); }
}
$GP = new Core();
$GP->set_notice();
add_action( 'save_post', array( $GP, 'get_notice' ) );
class Core {
public $notice;
function get_notice()
{ return $this->notice; }
function set_notice()
{ $this->notice = array('Warning'); }
function add_wp_action( $hook, $method )
{ add_action( $hook, array( $this, $method ) ); }
}
$GP = new Core();
$GP->set_notice();
$GP->add_wp_action( 'save_post', 'get_notice' );
或者,为了获得更好的灵活性,采用以下方式:
class Core {
public $notice;
function get_notice()
{ return $this->notice; }
function set_notice()
{ $this->notice = array('Warning'); }
}
$GP = new Core();
$GP->set_notice();
add_action( 'save_post', array( $GP, 'get_notice' ) );
class Core {
public $notice;
function get_notice()
{ return $this->notice; }
function set_notice()
{ $this->notice = array('Warning'); }
function add_wp_action( $hook, $method )
{ add_action( $hook, array( $this, $method ) ); }
}
$GP = new Core();
$GP->set_notice();
$GP->add_wp_action( 'save_post', 'get_notice' );
通过这种方式,您可以直接设置类中的所有wp钩子,并使用对象方法直接调用它们,而无需使用全局变量或函数技巧。正如您在评论中所说,由于wordpress钩子方法,您需要全局函数(我想对于插件) 这不是必需的:有一种方法可以将对象方法(而不是整个对象)传递给wordpress 您可以这样尝试:
class Core {
public $notice;
function get_notice()
{ return $this->notice; }
function set_notice()
{ $this->notice = array('Warning'); }
}
$GP = new Core();
$GP->set_notice();
add_action( 'save_post', array( $GP, 'get_notice' ) );
class Core {
public $notice;
function get_notice()
{ return $this->notice; }
function set_notice()
{ $this->notice = array('Warning'); }
function add_wp_action( $hook, $method )
{ add_action( $hook, array( $this, $method ) ); }
}
$GP = new Core();
$GP->set_notice();
$GP->add_wp_action( 'save_post', 'get_notice' );
或者,为了获得更好的灵活性,采用以下方式:
class Core {
public $notice;
function get_notice()
{ return $this->notice; }
function set_notice()
{ $this->notice = array('Warning'); }
}
$GP = new Core();
$GP->set_notice();
add_action( 'save_post', array( $GP, 'get_notice' ) );
class Core {
public $notice;
function get_notice()
{ return $this->notice; }
function set_notice()
{ $this->notice = array('Warning'); }
function add_wp_action( $hook, $method )
{ add_action( $hook, array( $this, $method ) ); }
}
$GP = new Core();
$GP->set_notice();
$GP->add_wp_action( 'save_post', 'get_notice' );
通过这种方式,您可以直接设置类中的所有wp挂钩,并使用对象方法直接调用它们,而无需使用全局变量或函数技巧。在询问之前是否尝试过<代码>var_dupm()不存在。@fusion3k这只是一个输入错误@OP为什么不
$GP->注意
?这是一个公共变量。正如@Flyer所说,您可以直接调用$GP->notice
并删除\u construnc
,核心函数
和notice\u global
。调用notice\u global()
而不是$GP->notice
@fusion3k是有特殊原因的,我的错误是var\u dump,是的,我将notice_global移出了类,因为我需要用WordPress自己的函数填充这个函数,并且不想在需要占用时创建对该类的新调用。您不能通过在彼此内部声明方法来限制方法的范围。因此,编写注意\u global()
函数内部核心函数()
会让您和其他人感到困惑。PHP应该引发一个严格的错误。PHP将把它当作一个普通的方法!因此,您在PHP中编写的代码是错误的。但是,因为您使用了global$globalvar代码>,这样做是错误的,代码将正常工作-/你问之前试过吗<代码>var_dupm()
不存在。@fusion3k这只是一个输入错误@OP为什么不$GP->注意
?这是一个公共变量。正如@Flyer所说,您可以直接调用$GP->notice
并删除\u construnc
,核心函数
和notice\u global
。调用notice\u global()
而不是$GP->notice
@fusion3k是有特殊原因的,我的错误是var\u dump,是的,我将notice_global移出了类,因为我需要用WordPress自己的函数填充这个函数,并且不想在需要占用时创建对该类的新调用。您不能通过在彼此内部声明方法来限制方法的范围。因此,编写注意\u global()
函数内部核心函数()
会让您和其他人感到困惑。PHP应该引发一个严格的错误。PHP将把它当作一个普通的方法!因此,您在PHP中编写的代码是错误的。但是,因为您使用了global$globalvar代码>,这样做是错误的,代码将正常工作-/清楚的想法是为了全局使用而移出,因为我想在不创建新实例的情况下使用WordPress函数,主要问题是这是否会导致过载或不正确。我明白的想法是为了全局使用而移出,因为我想在不创建新实例的情况下使用WordPress函数,主要的问题是,这是否会导致过载或我服用不当