我试图创建一个单例来处理某些表单数据,但是我无法弄清楚如何有效地设置/引用类中的变量。
这个想法是,在提交时,调用函数getpostdata()
,在类meta
中创建一个新实例,并将数组$_POST['ids']
保存到$this->ids
类。然后使用过滤器将另一段数据发送到同一类中的函数;但是,当我尝试在该函数中引用$this->ids
时,我收到以下错误:
致命错误:当不在public_html / wp-content / plugins / myplugin / myplugin.php中的对象上下文中时使用$ this
以下是代码:
class meta
{
# Singleton
protected static $instance = NULL;
public $ids;
private function __construct() {}
public static function get_instance()
{
NULL === self::$instance and self::$instance = new self;
return self::$instance;
}
public function post_info($info)
{
$this->ids = $info;
echo "good deal";
return $this->ids;
}
public function metafunction($usermeta)
{
echo "<br/>Dumping USERMETA: ";
var_dump($usermeta);
var_dump( $this->ids );
die();
}
}
add_filter('filter', 'meta::metafunction');
add_action('action', 'getpostdata');
function getpostdata(){
var_dump($_POST['ids']);
$a=meta::get_instance();
$info=$_POST['ids'];
$a->post_info($info);
echo "<br/>A vardump: ";
var_dump($a);
}
输出如下:
array(3) { [0]=> string(4) "test" [1]=> string(5) "test1" [2]=> string(5) "test2" } infodump: testgood deal
A vardump: object(meta)#110 (1) { ["ids"]=> array(3) { [0]=> string(4) "test" [1]=> string(5) "test1" [2]=> string(5) "test2" } }
Dumping USERMETA: array(4) { ["field_1"]=> string(4) "test" ["field_2"]=> string(4) "test" ["profile_field_ids"]=> string(3) "1,2" ["password"]=> string(34) "$P$BEgv26F57KKv/.dGpNcWip1Tbb8zyK0" } Fatal error: Using $this when not in object context in public_html/wp-content/plugins/myplugin/myplugin.php
我的猜测是,来自过滤器的电话不是犹太人,但如果有人有任何建议,我会很高兴。
答案 0 :(得分:1)
我认为问题不在于单身,而是您正在对meta::metafunction
进行静态调用。我的15秒分析,我认为你需要用
$test = meta::get_instance();
然后致电add_filter('filter', '$test->metafunction');
答案 1 :(得分:0)
你介意我改变你的代码吗?
我认为你需要在你创建的类上调用new
来实例化一个对象。一旦有了对象,就可以在其上调用$this->
。
<?php
class meta
{
public $ids;
public function meta() {} //this replaces __construct()
public function post_info($info)
{
$this->ids = $info;
echo "good deal";
return $this->ids;
}
public function metafunction($usermeta)
{
echo "<br/>Dumping USERMETA: ";
var_dump($usermeta);
var_dump($this->ids);
die();
}
}
function getpostdata(){
//using $array here as a placeholder for $_POST data
$array = array('a' => 1, 'b' => 2, 'c' => 3); //$_POST['ids'];
var_dump($array);
//This line in specific
$a = new meta();
$info = $array; //$_POST['ids'];
$a->post_info($info);
echo "<br/>A vardump: ";
var_dump($a);
}
getpostdata();
?>
以下是关于课程的php手册:http://php.net/manual/en/keyword.class.php
答案 2 :(得分:0)
我会用:
$your_plugin = new meta();
add_filter('filter', array($your_plugin, 'metafunction'));
请参阅WP Codex