imran_stxa
@imran_stxa
web-программист

Как решить проблему с ооп сеттер?

class sys{
  public $log = "<br />";

    static function log($newval)
    {$this->log.=$newval."<br />";}

    static function getlog()
    { return $this->log . "<br />";}
}

sys::log("установка");
sys::getlog();

Не понимаю, почему не работает.
  • Вопрос задан
  • 2477 просмотров
Решения вопроса 2
если хотите использовать статику, замените
$this->log
на
self::$log
Ответ написан
Комментировать
@m-haritonov
Необходимо исправить код либо на вариант, предложенный @victorvsk, либо на такой вариант:
class sys{
  static public $log = "<br />";

    static function log($newval)
    {static::$log.=$newval."<br />";}

    static function getlog()
    { return static::$log . "<br />";}
}

sys::log("установка");
sys::getlog();


Статические переменные и методы — это методы и переменные класса, а не объекта, поэтому обращение к ним происходит либо через имя класса (sys::$log), либо через ключевое слово self (self::$log; если происходит обращение к члену класса из самого класса), либо через ключевое слово static (static::$log; отличается от "self" лишь тем, что преобразуется в имя класса на стадии исполнения скрипта и потому подходит для использования при вызове метода из дочернего класса). Можно обращаться из методов объекта к статическим членам класса, но не наоборот (т.к. у объекта один класс и он известен объекту, а у класса может быть либо много объектов либо вообще ни одного).
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 2
viktorvsk
@viktorvsk
Насколько я понимаю, статические функции не создают экземпляра объекта, поэтому они не могут иметь $this

Могу сильно ошибаться

Поидеи, должно быть

class sys{
    public $log = "<br />";

    public function log($newval)
    {$this->log.=$newval."<br />";}

    public function getlog()
    { return $this->log . "<br />";}
}
$sys = new sys;

$sys->log("установка");
$sys->getlog();
var_dump($sys);
Ответ написан
Комментировать
akubintsev
@akubintsev
Опытный backend разработчик
В принципе, ответ уже дан выше, но если не хочется изобретать велосипед, создавая логгер, то посмотрите на Monolog. Считается самой популярной библиотекой логгирования.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы