@Drumsid

Объясните отрезок кода php?

Я только в начале освоения php. Пытаюсь разобраться с библиотекой docopt не могу понять вот этот отрезок
class Handler
    {
        /** @var bool */
        public $exit = true;
        /** @var bool */
        public $exitFullUsage = false;
        /** @var bool */
        public $help = true;
        /** @var bool */
        public $optionsFirst = false;
        /** @var ?string */
        public $version;
        public function __construct($options=array())
        {
            foreach ($options as $k=>$v) {
                $this->$k = $v;
            }
        }

вот эта строчка не понятна $this->$k = $v;
почему после this знак доллара? И что тут происходит?
  • Вопрос задан
  • 153 просмотра
Решения вопроса 3
gzhegow
@gzhegow
aka "ОбнимиБизнесмена"
<?php
        /** @var bool */
        public $exit = true;
        /** @var bool */
        public $exitFullUsage = false;
        /** @var bool */
        public $help = true;
        /** @var bool */
        public $optionsFirst = false;
        /** @var ?string */
        public $version;


это объявлены свойства, которые можно будет получить через $object->{ $name }; (потому как они помечены как публичные)
для удобства работы в PhpStorm и чтения указаны их типы данных, когда часто работаешь с кодом позволяет не тратить время на то, чтобы долго не вкуривать и не разбираться. Достаточно знать что там лежит.

<?php
      public function __construct($options=array())
        {
            foreach ($options as $k=>$v) {
                $this->$k = $v;
            }
        }


На вход бросается массив, который потом проходится по очереди каждый элемент и втыкивается в свойства которые обьявлены выше. Доллар после стрелки означает что само имя должно быть подставлено.

Но код косячный потому что пхп позволяет обьявлять свойства динамически. То есть даже если поля нет, его можно передать и оно появится. Надо проверять еще
<?php
if (! property_exists($this, $k)) throw new \Exception('Нет свойства');
Ответ написан
anton_reut
@anton_reut
Начинающий веб-разработчик
вот эта строчка не понятна $this->$k = $v;

В объекте создается переменная с ИМЕНЕМ которым становится КЛЮЧ, а содержимое переменной это ЗНАЧЕНИЕ, которые берутся из массива после foreach.
Ответ написан
Комментировать
profesor08
@profesor08 Куратор тега PHP
Как ты пытаешься вникать в какой-то код не зная основ? Изучил бы основы, самую базу, не пришлось бы ломать голову на такими глупыми вопросами.
https://www.php.net/manual/ru/language.variables.php
https://www.php.net/manual/ru/language.variables.v...
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы