Как изменить переменную в классе

159
21 марта 2019, 01:50

Как передать из метода actionIndex передать переменную в конструктор AdminBase? Переменная нужна для того чтобы передать в User::checkLogged()

abstract class AdminBase{
    public function __construct()
    {
        //$this->checkAdmin();
    }
    public static function checkAdmin(){
        $userId = User::checkLogged();
        $user = User::getUserById($userId);
        if($user['role'] == 'admin')
            return true;
        die('Access denied');
    }
}

Наследник:

class AdminController extends AdminBase
{
    public $locale;
    public function actionIndex($locale='')
    {
        $title = 'Админ Панель';
        require_once (ROOT . '/views/admin/index.php');
        return true;
    }
}
Answer 1

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

Если переменная нужна в конструкторе чтоб потом быть использованной в других методах, то заведите свойство в классе, задайте ему значение из метода, и используйте где требуется вообще не трогая конструктор:

class foo {
  $bar;
  function f1() { $this->bar = 1; }
  function f2() { echo $this->bar; }
}

Рано или поздно узнаете про DI и решите внедрить значение свойства из вне. Можете сразу подготовиться и добавить аксессоры для свойства:

class foo {
  $bar;
  function f1() { $this->setBar(1); }
  function f2() { echo $this->getBar(); }
  function setBar($bar) { $this->bar = $bar; }
  function getBar() { return $this->bar; }
}
READ ALSO
После переноса сайта на другой сервер перестала работать почта

После переноса сайта на другой сервер перестала работать почта

В коде используется PHPMailer для заявок с сайта, там есть 2 адреса no-reply@mydomainru который отправляет заявки на sales@mydomain

178
Как отправить видео на почту?

Как отправить видео на почту?

При загрузки видео в шаблон для письма, используя плагин TinyMCE не приходит видео на почту mailru

146
Есть ли что-то типа EQUALS в Catch c++?

Есть ли что-то типа EQUALS в Catch c++?

Ситуация такая, есть класс, в котором перегружены операторы сложения и равенства, нужно написать юнит-тесты к этому классу (например, c1 + c2 == c3, где...

175
Проблема с I/O в процессе или трубе(pipe)

Проблема с I/O в процессе или трубе(pipe)

Задача - выполнить последовательность команд в дочерней консоли Windows и записать их вывод в родительскую консольАлгоритм программы, если...

236