За последние 24 часа нас посетили 18100 программистов и 1650 роботов. Сейчас ищут 1553 программиста ...

Есть ли в php автосоздание класса

Тема в разделе "Прочие вопросы по PHP", создана пользователем alexpts, 30 окт 2010.

  1. alexpts

    alexpts Активный пользователь

    С нами с:
    18 ноя 2009
    Сообщения:
    28
    Симпатии:
    0
    Адрес:
    Россия
    То что имеется:

    $NameClass = new NameClass();
    $NameClass->metod();


    Есть класс NameClass у которого есть метод metod.
    Хочется так:
    $NameClass->metod();

    Т.е. вызывать метод необъявленного объекта, чтобы в этом случае можно было выполнить какую-то логику, что-то вроде __autoload(), но только для создания объекта.

    Т.е. будет браться $NameClass, создаваться объект с таким именем и вызываться снова $NameClass->metod(); только у нас уже будет вызываться метод объекта уже определенного.



    Думаю идея понятна в целом, что я хочу. Есть ли что-то такое в php?
     
  2. Ti

    Ti Активный пользователь

    С нами с:
    3 июл 2006
    Сообщения:
    2.378
    Симпатии:
    1
    Адрес:
    d1.ru, Екатеринбург
  3. alexpts

    alexpts Активный пользователь

    С нами с:
    18 ноя 2009
    Сообщения:
    28
    Симпатии:
    0
    Адрес:
    Россия
    Спасибо
     
  4. tommyangelo

    tommyangelo Старожил

    С нами с:
    6 дек 2009
    Сообщения:
    2.549
    Симпатии:
    0
    Адрес:
    Мариуполь
    А статические методы чем не подходят?

    NameClass::metod()
     
  5. [vs]

    [vs] Суперстар
    Команда форума Модератор

    С нами с:
    27 сен 2007
    Сообщения:
    10.559
    Симпатии:
    632
    Похоже на паттерн singleton
     
  6. alexpts

    alexpts Активный пользователь

    С нами с:
    18 ноя 2009
    Сообщения:
    28
    Симпатии:
    0
    Адрес:
    Россия
    tommyangelo, очень много будет статических методов, которые отрабатывают всего 1 раз, держать их в памяти не хочется.
    Да и просто интересно стало, есть ли такая возможность в php или нет ) Так как с php знаком не так давно и много не знаю, решил спросить.


    [vs], что за патерн singleton, это про запись объекта в статическую переменную и при повторном создании объекта возврат "бывшего" объекта из статической переменной?
     
  7. pohapecoder

    pohapecoder Активный пользователь

    С нами с:
    16 окт 2010
    Сообщения:
    63
    Симпатии:
    0
    >вызывать метод необъявленного объекта

    Ха ха ну и бред. Если переменная необъявлена - интерпретатор как должен тип то определить, по методу и аргументам проверять все классы чтоли?
     
  8. Костян

    Костян Активный пользователь

    С нами с:
    12 ноя 2009
    Сообщения:
    1.724
    Симпатии:
    1
    Адрес:
    адуктО
    да, это бред какой то...
     
  9. alexpts

    alexpts Активный пользователь

    С нами с:
    18 ноя 2009
    Сообщения:
    28
    Симпатии:
    0
    Адрес:
    Россия
    pohapecoder, нет. Он должен вызвать какую-то логику, как в аналогии с вызовом __autoload, когда мы пытаемся создать объект неопределнного класса, читайте мой первый пост внимательнее, я там писал о предполагаемом принципе.


    То, что это бред, я с вами, ребят, не согласен. Существует же отложенная загрузка данных в объект и это не бред, почему тогда отложенное создание объекта не имеет права существовать?
     
  10. [vs]

    [vs] Суперстар
    Команда форума Модератор

    С нами с:
    27 сен 2007
    Сообщения:
    10.559
    Симпатии:
    632
    нет, это бред
    при обращении к необъявленной переменной как к объекту, создается переменная с экземпляром класса stdClass, и это нельзя изменить. PHP пофиг на имя переменной.
     
  11. pohapecoder

    pohapecoder Активный пользователь

    С нами с:
    16 окт 2010
    Сообщения:
    63
    Симпатии:
    0
    Еще раз хорошо подумай - как интепретатор сможет определить по названию метода конкретный класс для инстанцирования?
    К примеру - есть три класса имеют метод method() и какой из них должен использоватся в данном случае?

    Если же ты думаешь что можно использовать както название переменной - значить оно у тебя будет явно задано и = названию класса следовательно в данном случае используется синглтон или фабрика, без всяких изъебств
     
  12. Dagdamor

    Dagdamor Активный пользователь

    С нами с:
    4 фев 2006
    Сообщения:
    2.095
    Симпатии:
    1
    Адрес:
    Барнаул
    pohapecoder
    Синглтоны-то тут при чем?
     
  13. alexpts

    alexpts Активный пользователь

    С нами с:
    18 ноя 2009
    Сообщения:
    28
    Симпатии:
    0
    Адрес:
    Россия

    Вы так и не поняли, что я имел ввиду. По классам не будет искаться ничего.

    еще раз все сначала:

    $className->metod()

    1. Объект не определен.
    2. Вызывается логика, которая пытается создать конкретный объект $className = new className()
    2.2. Если объект создается, т.е. такой класс существует, то вызывается снова $className->metod(), но $className уже после шага 2 определен! Никакого поиска не просисходит. Все однозначно.
    2.3. Если нет, то ошибка.
     
  14. [vs]

    [vs] Суперстар
    Команда форума Модератор

    С нами с:
    27 сен 2007
    Сообщения:
    10.559
    Симпатии:
    632
    alexpts
    Тебе уже сказали, что это бред. Обращение к несуществующему методу - фатальная ошибка, которая завершает работу скрипт. Тут не может быть никакой логики.
     
  15. alexpts

    alexpts Активный пользователь

    С нами с:
    18 ноя 2009
    Сообщения:
    28
    Симпатии:
    0
    Адрес:
    Россия
    [vs], я тебе с 1 раза понял

    еще раз объяснил, что я имел ввиду для pohapecoder, т.к. он не о том вообще начал мне объяснять, я спросил об 1 и свои рассуждения написал, а он совсем о другом, что и так понятно


    Ну и по поводу бреда, я тут с тобой не соглашусь, [vs], по мне такая бы конструкция вполне могла бы существовать в php. Не вижу в этом ничего бредогого.
     
  16. vasa_c

    vasa_c Активный пользователь

    С нами с:
    22 мар 2006
    Сообщения:
    1.760
    Симпатии:
    0
    Адрес:
    гор.Ленинград
    Основной бред, из всего этого бреда:
    Если избавиться от него, то всё становится намного проще.
     
  17. Gromo

    Gromo Активный пользователь

    С нами с:
    24 май 2010
    Сообщения:
    2.786
    Симпатии:
    2
    Адрес:
    Ташкент
    vasa_c
    +1
    полностью согласен
     
  18. pohapecoder

    pohapecoder Активный пользователь

    С нами с:
    16 окт 2010
    Сообщения:
    63
    Симпатии:
    0
    Вот тут происходит деление на ноль.
    Какой КОНКРЕТНЫЙ объект может быть если имя переменной не учитывается, а имя класса неизвестно. Ты так этоо и не понял. Название переменной может быть любым:
    $hui->metod()
    или
    $pizda->metod()

    и такой фичи нет не в одном езыке - ибо это бред, еще раз повторюсь.
    если я правильно понял тебе нужен эквивалент этого:
    Код (Text):
    1.  
    2. if(!isset($className))
    3.   $className = new className();
    4. $className->metod();
    напиши макрос для IDE и пользуйся на здоровье. с IDE можно и не такие извраты делать.