Использование $ this, когда нет в классе объектной модели контекста

Я указал свой 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, Как установить частную переменную, чтобы она могла использоваться в функциях своего класса?

-1

Решение

static Ключевое слово означает, что эта функция вызывается для самого класса, а не для экземпляра класса. Это означает $this не относится ни к чему.

Если это функция, которую нужно вызывать в конкретном экземпляре, чтобы иметь доступ к ее членам, вам нужно либо сделать ее нестатичной, либо передать экземпляр класса (возможно, первый, поскольку это то, что нестатический метод для).

Если у класса есть список его экземпляров: то, что вы делаете здесь, это инициализация list на пример вашего класса, поэтому каждый экземпляр будет иметь пустой список. Это может быть не то, что вы собираетесь.

2

Другие решения

ты не в контекст объекта потому что ваша функция статический. ты должен использовать self вместо. self относится к текущему классу:

array_push(self::list, $array[$i]);
0

Вы просто не можете использовать $this в статических методах, потому что статические методы не являются частью экземпляра объекта, которому $this относится. Статические методы могут быть вызваны, даже если объект не создан.

Вы должны сделать reorderOrg не статично, чтобы работать.

0

Пожалуйста, прочитайте о статических методах и свойствах в PHP.

Вы не можете получить доступ $this в статическом методе, потому что у вас нет экземпляра класса, который должен называться $this,

У вас есть два варианта здесь

  1. Объявите свойство как статическое и получите к нему доступ self ключевое слово. Например

    // Декларация

    public static $ list = array ();

    // Доступ

    self :: $ list [] = ‘что-то’;

  2. Создайте объект класса и получите доступ к созданному объекту.

    // Создать объект

    $ staff = new Staff ();

    // Доступ

    $ staff-> list [] = ‘что-то’;

Не забудьте прочитать документация!

0

Похожие сообщения: Использование этого внутри статической функции не удается

Это отвечает на ваш вопрос? При использовании статического метода; вы должны использовать self :: not $ this->

http://php.net/manual/en/language.oop5.static.php

array_push(self::list,...);
0
По вопросам рекламы [email protected]