То что имеется: $NameClass = new NameClass(); $NameClass->metod(); Есть класс NameClass у которого есть метод metod. Хочется так: $NameClass->metod(); Т.е. вызывать метод необъявленного объекта, чтобы в этом случае можно было выполнить какую-то логику, что-то вроде __autoload(), но только для создания объекта. Т.е. будет браться $NameClass, создаваться объект с таким именем и вызываться снова $NameClass->metod(); только у нас уже будет вызываться метод объекта уже определенного. Думаю идея понятна в целом, что я хочу. Есть ли что-то такое в php?
tommyangelo, очень много будет статических методов, которые отрабатывают всего 1 раз, держать их в памяти не хочется. Да и просто интересно стало, есть ли такая возможность в php или нет ) Так как с php знаком не так давно и много не знаю, решил спросить. [vs], что за патерн singleton, это про запись объекта в статическую переменную и при повторном создании объекта возврат "бывшего" объекта из статической переменной?
>вызывать метод необъявленного объекта Ха ха ну и бред. Если переменная необъявлена - интерпретатор как должен тип то определить, по методу и аргументам проверять все классы чтоли?
pohapecoder, нет. Он должен вызвать какую-то логику, как в аналогии с вызовом __autoload, когда мы пытаемся создать объект неопределнного класса, читайте мой первый пост внимательнее, я там писал о предполагаемом принципе. То, что это бред, я с вами, ребят, не согласен. Существует же отложенная загрузка данных в объект и это не бред, почему тогда отложенное создание объекта не имеет права существовать?
нет, это бред при обращении к необъявленной переменной как к объекту, создается переменная с экземпляром класса stdClass, и это нельзя изменить. PHP пофиг на имя переменной.
Еще раз хорошо подумай - как интепретатор сможет определить по названию метода конкретный класс для инстанцирования? К примеру - есть три класса имеют метод method() и какой из них должен использоватся в данном случае? Если же ты думаешь что можно использовать както название переменной - значить оно у тебя будет явно задано и = названию класса следовательно в данном случае используется синглтон или фабрика, без всяких изъебств
Вы так и не поняли, что я имел ввиду. По классам не будет искаться ничего. еще раз все сначала: $className->metod() 1. Объект не определен. 2. Вызывается логика, которая пытается создать конкретный объект $className = new className() 2.2. Если объект создается, т.е. такой класс существует, то вызывается снова $className->metod(), но $className уже после шага 2 определен! Никакого поиска не просисходит. Все однозначно. 2.3. Если нет, то ошибка.
alexpts Тебе уже сказали, что это бред. Обращение к несуществующему методу - фатальная ошибка, которая завершает работу скрипт. Тут не может быть никакой логики.
[vs], я тебе с 1 раза понял еще раз объяснил, что я имел ввиду для pohapecoder, т.к. он не о том вообще начал мне объяснять, я спросил об 1 и свои рассуждения написал, а он совсем о другом, что и так понятно Ну и по поводу бреда, я тут с тобой не соглашусь, [vs], по мне такая бы конструкция вполне могла бы существовать в php. Не вижу в этом ничего бредогого.
Вот тут происходит деление на ноль. Какой КОНКРЕТНЫЙ объект может быть если имя переменной не учитывается, а имя класса неизвестно. Ты так этоо и не понял. Название переменной может быть любым: $hui->metod() или $pizda->metod() и такой фичи нет не в одном езыке - ибо это бред, еще раз повторюсь. если я правильно понял тебе нужен эквивалент этого: Код (Text): if(!isset($className)) $className = new className(); $className->metod(); напиши макрос для IDE и пользуйся на здоровье. с IDE можно и не такие извраты делать.