Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/wordpress/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP函数在另一个函数[类]中_Php_Wordpress - Fatal编程技术网

PHP函数在另一个函数[类]中

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(){

我有下面的代码,在一个类中执行一个全局函数来填充wordpress的函数,问题是我能得到一个变量公共类的唯一方法如下

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函数,主要的问题是,这是否会导致过载或我服用不当