Как быстро и правильно преобразовать массив в экземпляр класса?
В сессии хранится массив с данными юзера, т. е. login, e-mail, avatar и т. п. Надо по быстрому создать экземпляр класса User, у которого свойства в точности совпадают с именами элементов массива. Как это сделать в одну строку?
Вариант $user = new User($_SESSION['name'], $_SESSION['email']... ) - слишком неуклюжий. Вот, например, обратный процесс выполняется легко:
$_SESSION = (array)$user;
Можно аналогично выполнить и преобразование массив->объект?
Посторонним В.: меня тоже это интересует. я делал что при конструкте или отдельным методом переданный массив вручную присваивается свойствам типа такого gyazo.com/41c3d3ea3398fa4705ea57b91a33a3fd. можно и в цикле пройтись но тогда надо левые значения отсеивать если есть
Посторонним В.: Вся соль в том, что ты ни бельмеса не смыслишь в программировании, и любую примитивную вещь хочешь сделать через жопу. Сначала ты, от неграмотности, начинаешь удалять гланды через жопу автогеном, а потом прибегаешь с проблемой "баллон с газом в жопу не влезает". И с дебильным выражением лица начинаешь удивляться - почему ни у кого нет ответа на вопрос, как засунуть баллон в жопу. КАЖДЫЙ твой вопрос построен по такой схеме.
FanatPHP: кстати хранить объект в сессии не всегда прокатывает. а вдруг у тебя сам класс изменится при сохранении структуры данных, с которыми работает. это придется же его везде там где он хранится пересохранять. да и как хранить сералайзом чтоли? хз он мне никогда не нравился. джйсон енкод упадет если хотябы одно свойство окажется ссылкой на объект. для себя я решил данные хранить массивами, только не придумал более пацанской методики чем присвоение вручную. либо другой способ использую это тот же самый массив с данными хранится в одном свойстве, а методы объекта с ним работают. единственный минус что свойств как таковых нет и весь доступ только через методы, что не особо то и минус. вообще не припомню места где бы менял какие то паблик свойства напрямую
FanatPHP: так может нам всем выйти а ты тут сам посидишь?
да стормозил сессия сама его сложит и разложит. но а если ты сам класс или интерфейсы/вызовы к нему поменял наживую несовместимо с тем что у юзеров в их сессиях уже лежит? всех сбрасывать? чекать/обновлять?
Опять вопрос из серии "А если я сделаю через жопу, то нормально у меня работать не будет". В любом случае, опять же, есть специальный метод для восстановления состояния.
FanatPHP: а если объект на принципиальном уровне работает только с заданными данными с самого начала? только с ними и никак без них, если он вообще не имеет права тусоваться без данных. почему нельзя их присвоить в момент создания, чтобы не писать лишнюю строку после создавания. тем более если единственное назначение объекта это быть контейнером для данных и методов для операций с ними. короче напиши ответ или не выебывайся типа ты все знаешь а все тут недостойные мудаки
Я не гуру и вообще, возможно, недостойный мудак, но я в таком чтении класса из сессии вижу только и исключительно способ загнать в этот класс данные в обход всех проверок на XSS и прочие инъекции. Поэтому постарался бы не решать поставленную ТС проблему, а устранить ее в принципе.
Adamos: XSS? Данные сессии обычно не с клиента берутся, а перед тем как туда попасть должны быть обработаны против XSS.
Не вам выбирать, нужно ли спрашивающему решение, или нет.
Adamos: во-первых, не надо уподобляться и материться. Если мод до сих пор не увидел и не забанил кого-то за мат - это не значит, что не увидит и не забанит. Во-вторых, все "проверки" на инъекции должны делаться перед использованием данных (например на ХСС - перед выводом, и так далее). Так что с этой-то сточки зрения тут все чисто. Но в целом ты прав - проблему надо не ршать, а устранять. Сразу сохраняя в сессии объект, а не его данные. А эти чуваки пытаются прикрыть собственную дремучесть, отчаянно выдумывая всякие "а если" - но, как это часто бывает с диванными тиаретиками - в абсолютном отрыве от реальности.
FanatPHP: Мне просто кажется, что само по себе хранение пользователя (что классом, что массивом) в сессии - it smells. Там, заметьте, еще и аватар в тех же данных. Поэтому от того, кто так сделал, поневоле ожидаешь и забытой проверки на инъекции перед выводом...