Я указал свой MV, у меня есть простые классы контроллера Model +, и я не могу получить переменную в модели, которая будет распознана при вызове другой функцией
Класс контроллера
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, когда не в контексте объекта в и его делать с array_push в классе модели не нравится $this->list
, Как установить частную переменную, чтобы она могла использоваться в функциях своего класса?
static
Ключевое слово означает, что эта функция вызывается для самого класса, а не для экземпляра класса. Это означает $this
не относится ни к чему.
Если это функция, которую нужно вызывать в конкретном экземпляре, чтобы иметь доступ к ее членам, вам нужно либо сделать ее нестатичной, либо передать экземпляр класса (возможно, первый, поскольку это то, что нестатический метод для).
Если у класса есть список его экземпляров: то, что вы делаете здесь, это инициализация list
на пример вашего класса, поэтому каждый экземпляр будет иметь пустой список. Это может быть не то, что вы собираетесь.
ты не в контекст объекта потому что ваша функция статический. ты должен использовать self
вместо. self
относится к текущему классу:
array_push(self::list, $array[$i]);
Вы просто не можете использовать $this
в статических методах, потому что статические методы не являются частью экземпляра объекта, которому $this
относится. Статические методы могут быть вызваны, даже если объект не создан.
Вы должны сделать reorderOrg
не статично, чтобы работать.
Пожалуйста, прочитайте о статических методах и свойствах в PHP.
Вы не можете получить доступ $this
в статическом методе, потому что у вас нет экземпляра класса, который должен называться $this
,
У вас есть два варианта здесь
Объявите свойство как статическое и получите к нему доступ self
ключевое слово. Например
// Декларация
public static $ list = array ();
// Доступ
self :: $ list [] = ‘что-то’;
Создайте объект класса и получите доступ к созданному объекту.
// Создать объект
$ staff = new Staff ();
// Доступ
$ staff-> list [] = ‘что-то’;
Не забудьте прочитать документация!
Похожие сообщения: Использование этого внутри статической функции не удается
Это отвечает на ваш вопрос? При использовании статического метода; вы должны использовать self :: not $ this->
http://php.net/manual/en/language.oop5.static.php
array_push(self::list,...);