我已经说明了我的定制MV,我有一个简单的模型+控制器类,我不能通过不同的函数调用模型中的var
控制器类是
class StaffController {
protected $module = "staff";
public function __construct()
{
//include the staff Model
require_once(MODEL_PATH.$this->module.'.php');
}
public function index() {
// we store all the posts in a variable
$staff = Staff::all();
header('Content-Type: application/json');
echo json_encode($staff);
}
$staff = Staff::all();
调用模型类,并调用未被识别的$list
变量:
class Staff {
public $list = array();
public function __construct() {
$this->list = [];
}
public static function all() {
//get all the staff
$temp = [];
$db = Db::getInstance();
$req = $db->query('SELECT * FROM data ORDER BY ParentID ASC');
// we create a list of Post objects from the database results
foreach($req->fetchAll() as $staff) { array_push($temp,$staff);
self::reorderOrg($temp );
return $final;
}
private static function reorderOrg($array, $parent = 0, $depth = 0){
//reorganise org
for($i=0, $ni=count($array); $i < $ni; $i++){
//check if parent ID same as ID
if($array[$i]['parentID'] == $parent){
array_push($this->list ,$array[$i]); //***** no being recognized
self::reorderOrg($array, $array[$i]['id'], $depth+1);
}
}
return true;
}
}
我收到以下错误在不在对象上下文中使用$ this 并且它与模型类中不喜欢$this->list
的array_push有关。如何设置私有var,以便它可以在自己的类函数中使用
答案 0 :(得分:2)
static
关键字表示在类本身上调用该函数,而不是在类的实例上调用。这意味着$this
不会引用任何内容。
如果它是一个需要在特定实例上调用的函数,以便您可以访问其成员,则需要将其设置为非静态或传入类的实例(可能是前者,因为这就是非静态方法的用途。)
让类保留其实例列表:您在这里做的是在类的实例上初始化list
,因此每个实例都有一个空列表。这可能不是你想要的。
答案 1 :(得分:0)
您不在对象上下文中,因为您的函数是 static 。你必须使用self
代替。 self
指的是当前的类:
array_push(self::list, $array[$i]);
答案 2 :(得分:0)
你很简单,不能在静态方法中使用$this
,因为静态方法不是$this
引用的实例化对象的一部分。即使没有实例化对象,也可以调用静态方法。
为了工作,你必须使reorderOrg
非静态。
答案 3 :(得分:0)
请阅读PHP中的静态方法和属性。
您无法在静态方法中访问$this
,因为您没有该类的任何实例应该被称为$this
。
这里有两个选择
将属性声明为静态,并使用self
关键字对其进行访问。例如
//宣言
public static $ list = array();
//访问
self :: $ list [] =&#39;某事&#39;;
创建类的对象并访问已创建对象的属性。
//创建对象
$ staff = new Staff();
//访问
$ staff-&gt; list [] =&#39; something&#39;;
请务必阅读documentation!
答案 4 :(得分:0)
相关文章:Using this inside a static function fails
这是否可以解决您的问题?使用静态方法时;你必须使用self :: not $ this-&gt;
http://php.net/manual/en/language.oop5.static.php
array_push(self::list,...);