@sanex3339

Как получить имя конкретного свойства класса?

Честно искал в гугле минут 20, так и не нашел нужного мне ответа.

Есть св-во класса:
$this->myAmazingPropery = 'test';

Далее я хочу создать новый элемент массива $array, где ключ будет именем вышеуказанного св-ва, значение - значение свойства.
Сейчас я прописываю это дело вручную, у меня около 8-ми свойств:
$this->array['myAmazingPropery'] = $this->myAmazingPropery; 
$this->array['myAmazingPropery1'] = $this->myAmazingPropery1;
$this->array['myAmazingPropery2'] = $this->myAmazingPropery2;


Но я хочу вместо ручного прописывания сделать метод, аргументом которому передавать массив вида:
[$this->myAmazingPropery, $this->myAmazingPropery1, ...]


В этом методе будет перебираться переданный методу массив со свойствами и автоматически строиться новый массив $this->array.

Проблема в том, что я не знаю, как мне получить имя свойства что бы пихнуть его в кач-ве ключа элемента массива $array
  • Вопрос задан
  • 1273 просмотра
Решения вопроса 2
sofcase
@sofcase
Веб-разработчик
Не совсем понял вопрос, но может это вам поможет:
php.net/get_object_vars
php.net/get_class_vars
Ответ написан
@kwolfy
То, что вы хотите сделать, невозможно в таком виде, и хочу заметить, не очень хорошее решение.
Дело в том, что, когда вы передается [$this->myAmazingPropery, $this->myAmazingPropery1, ...] метод уже получает обычный массив, и совершенно непонятно и невозможно уже отследить, откуда эти данные взялить. В этой задаче, есть куча решений, можно поизвращаться, но я вам предлагаю, более менее сносный вариант. Что то вроде этого
Class MyAmazingClass
{
    public function setPropertiesToSession()
    {
        $propertiesNames = ['myAmazingPropery1', 'myAmazingPropery2', 'myAmazingPropery20'];
        foreach($propertiesNames as $propertyName)
            $this->array[$propertyName] = $this->$propertyName;
    }
}


Но это только как пример. Лучше конечно, если вы перенесёте интерфейс добавления значений в сессию, в отдельный класс
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
kawabanga
@kawabanga
Ничего не понятно.

Изучите свойства класса - public/static/private.
Возможно сразу же отпадут вопросы.
Ответ написан
difiso
@difiso
В параллельной вселенной я космонавт
Как завернули-то, двух людей с толку сбили!
Поищите в гугле что-то в районе магических методов PHP. Вам нужны методы __get(…) и __set(…).
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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