За последние 24 часа нас посетили 23897 программистов и 1665 роботов. Сейчас ищут 1226 программистов ...

Что такое new self()

Тема в разделе "Wordpress", создана пользователем Catrina, 13 мар 2016.

  1. Catrina

    Catrina Новичок

    С нами с:
    24 апр 2015
    Сообщения:
    321
    Симпатии:
    0
    В плагине wordpress есть такой код:

    Код (PHP):
    1.     /**
    2.      * Init
    3.      */
    4.     public static function init() {
    5.  
    6.         $metaslider = new self();
    7.  
    8.     }
    не могу понять, что он значит и почему в этой функции нету return

    Добавлено спустя 1 минуту 12 секунд:
    Этот код в дальнейшем связан с этим, как я понимаю:

    Код (PHP):
    1. add_action( 'plugins_loaded', array( 'MetaSliderPlugin', 'init' ), 10 );
    Добавлено спустя 1 минуту 13 секунд:Прошу не отсылать к теме про позднее статическое связывание, я там ничего не поняла. :)

    Добавлено спустя 2 минуты 34 секунды:
    Хорошо если ещё и дядя с бородой объяснит. Его объяснения я всегда понимаю. :)
     
  2. mahmuzar

    mahmuzar Старожил

    С нами с:
    6 апр 2012
    Сообщения:
    4.631
    Симпатии:
    425
    Адрес:
    РД, г. Махачкала.
    Catrina, вот пример и доки. Попробуй у себя запустить и посмотреть на дамп, ты должа догадаться что он делает.
    Код (PHP):
    1. <?php
    2.  
    3. class A {
    4.  
    5.     static function create() {
    6.  
    7.         return new self();  
    8.     }
    9.  
    10. }
    11.  
    12. class B extends A {
    13.     
    14. }
    15.  
    16. class C extends B {
    17.     
    18. }
    19.  
    20. $obj = C::create();
    21. var_dump($obj); 
    "У тебя есть борода, я скажу тебе да". ? :)

    Добавлено спустя 1 минуту 37 секунд:
    Почему нету return, может он там не требуется?
     
  3. VLK

    VLK Старожил

    С нами с:
    15 дек 2013
    Сообщения:
    3.010
    Симпатии:
    58
    Код (PHP):
    1. new self(); 
    создает объект текущего класса т.е.:
    Код (PHP):
    1. class FirstCls {
    2.     public static function init() {
    3.         return new self();
    4.     }
    5. } 
    вернет объект класса FirstCls, так же можно писать за место self - static.

    не знаю насчет поздних и ранних связываний, но

    Код (PHP):
    1. public static function init() {
    2.         $metaslider = new self();
    3.     } 
    или это не полной код метода или он не делает ни чего, т.е. пустышка.
     
  4. mahmuzar

    mahmuzar Старожил

    С нами с:
    6 апр 2012
    Сообщения:
    4.631
    Симпатии:
    425
    Адрес:
    РД, г. Махачкала.
    Если словами, то self() используется для разрешения ссылок на содержащий класс, в контексте которого вызывается метод.
     
  5. [vs]

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

    С нами с:
    27 сен 2007
    Сообщения:
    10.559
    Симпатии:
    632
    Код (PHP):
    1. class FirstCls {
    2.     public static function init() {
    3.         return new self();
    4.     }
    5. }  
    то же самое, что

    Код (PHP):
    1. class FirstCls {
    2.     public static function init() {
    3.         return new FirstCls();
    4.     }
    5. }  
    Self в переводе с английского сам.
     
  6. mahmuzar

    mahmuzar Старожил

    С нами с:
    6 апр 2012
    Сообщения:
    4.631
    Симпатии:
    425
    Адрес:
    РД, г. Махачкала.
    тут нужно не забывать одного, что при наследовании класса FirsCls классом SecondCls и если вместо self написать static поведение будет совсем другое.
    Поэтому, не всегда self и static одно и то же.
     
  7. Catrina

    Catrina Новичок

    С нами с:
    24 апр 2015
    Сообщения:
    321
    Симпатии:
    0
    Да, вот так всё работает тоже
    Код (PHP):
    1. public static function init() {} 
    Вот и я удивляюсь, что нету return...

    Добавлено спустя 2 минуты 43 секунды:
    К которому можно обращаться в самом же классе, угу?
     
  8. mahmuzar

    mahmuzar Старожил

    С нами с:
    6 апр 2012
    Сообщения:
    4.631
    Симпатии:
    425
    Адрес:
    РД, г. Махачкала.
    Catrina, посмотри все использования метода и ты увидишь что там происходит.
     
  9. Catrina

    Catrina Новичок

    С нами с:
    24 апр 2015
    Сообщения:
    321
    Симпатии:
    0
    Хорошо, буду запускать код. Спасибо. )
     
  10. mahmuzar

    mahmuzar Старожил

    С нами с:
    6 апр 2012
    Сообщения:
    4.631
    Симпатии:
    425
    Адрес:
    РД, г. Махачкала.
    В NetBeans можно навести на имя функции стрелку нажать правую клавижу и в списке меню будет найти случаи использвания.
    А может метод нигде не вызывает, как говорили выше, и он пустышка.
     
  11. [vs]

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

    С нами с:
    27 сен 2007
    Сообщения:
    10.559
    Симпатии:
    632
    Надо смотреть, что в конструкторе. Скорее всего, смысл действия - инициировать конструктор.
     
  12. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.115
    Симпатии:
    1.244
    Адрес:
    там-сям
    Допускаю, что это может быть мусор. Остаток после отладки, возможно return должен там быть, а возможно там подразумевалось self::$metaslider, хз. Если не лениво, ищи примеры использования и определяй что там должно быть.

    Плагины пишут обычные индийские парни, а не боги :) если код на публичном сервисе вроде github, то можно продолжить им pull request с исправлениями.
     
  13. Catrina

    Catrina Новичок

    С нами с:
    24 апр 2015
    Сообщения:
    321
    Симпатии:
    0
    А это правильно, взять один плагин и попробовать его препарировать?
     
  14. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    канэшн
     
  15. Catrina

    Catrina Новичок

    С нами с:
    24 апр 2015
    Сообщения:
    321
    Симпатии:
    0
    Я правильно понимаю, что Вордпресс бы переписать по хорошему на ООП, но сделать это невозможно, потому что куча плагинов и тем написана. И сейчас он содержит в себе горы устаревшего хлама. Угу? я права?
     
  16. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.115
    Симпатии:
    1.244
    Адрес:
    там-сям
    ну да, верно.
    хотя ты тыкала в код не самого вордпресса, а стороннего плагина. поэтому ход твоих мыслей неправильный, правильный только вывод )))
     
  17. [vs]

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

    С нами с:
    27 сен 2007
    Сообщения:
    10.559
    Симпатии:
    632
    По части, что в этом есть какая-то нужда - нет, функциональный фреймворк WP не мешает использовать свои классы или библиотеки с классами. Вон joomla на ООП, а дефектного хлама для неё куда больше.
     
  18. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.115
    Симпатии:
    1.244
    Адрес:
    там-сям
    кое-кто уже переписывал код на современный лад.
    https://github.com/jgrossi/corcel
    автор предлагает использовать админку WP как есть, а публичную часть сайта (в терминах WP это "фронт-энд") реализовать через нормальные классы. все основные сущности включая "кастомные посты" реализованы в этом Corcel.
     
  19. Catrina

    Catrina Новичок

    С нами с:
    24 апр 2015
    Сообщения:
    321
    Симпатии:
    0
    Эм.. ну вообще плагин на ООП, но я где-то читала, что вордпресс не на ООП, вот и подумала, что он уже так оброс ракушками, что поздно его переписывать. :)
     
  20. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.115
    Симпатии:
    1.244
    Адрес:
    там-сям
    Смешно когда пишут "на ООП". )))

    Внутри Wordpress много где используется слово class. Это ООП? ))) Но сам вордпрессовский API это огромный набор функций в глобальном пространстве имен. И это нереально изменить. Потому что обратная совместимость дорогого стоит.

    Я бы обсудил что такое ООП, а что нет. Но это уже лютый оффтопик.
     
  21. Catrina

    Catrina Новичок

    С нами с:
    24 апр 2015
    Сообщения:
    321
    Симпатии:
    0
    А я не могу спорить на эту тему. Я верю всему, что вы говорите. :)
     
  22. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.115
    Симпатии:
    1.244
    Адрес:
    там-сям
    вот и молодец.

    Для людей не из мира PHP WordPress это такое пугало огородное. Если ты признаешся, что что-то там делаешь заказчику на WP, они тебя закидают какашками: "пхп головного мозга". Хотя на самом деле WP очень даже ООП, его модели можно расширять и события есть. Просто упаковка этих сущностей выглядит старомодно — в стиле PHP 4.