Intereting Posts
Как изменить атрибут title, возвращаемый comments_popup_link ()? Добавление переменного продукта в WooCommerce программно Уровень приоритета add_action wp_enqueue_script работает только для администраторов Редактирование нескольких пользовательских типов сообщений при сохранении нового или отредактированного сообщения Изменить короткий код для работы с настраиваемыми типами сообщений как настроить настраиваемые структуры контента Ищете хороший способ включить PHP-код в сообщениях, но используя специальную разметку include, а не прямой php-код Подробнее открыть внешнюю ссылку Генерация robots.txt динамически Лучшая практика при модификации плагинов CSS wp_remote_get vs. fetch_feed? что лучше для производительности? Как удалить только страницы из панели администратора? Показать все сообщения для таксономического термина в нескольких пользовательских типах сообщений Как заменить функцию с помощью дочерней темы? wordpress multisite (основной сайт, чтобы стать дочерним и субсайтом, стал основным веб-сайтом).

Почему WP_Query имеют методы, которые возвращают общедоступные свойства с тем же именем

Большинство (если не всех) методов is_* в классе WP_Query имеют соответствующее общедоступное свойство, и, как представляется, методы возвращают свойство, например:

 public function is_search() { return (bool) $this->is_search; } 

Какова цель метода, когда свойство уже установлено? Существуют ли случаи, когда вы используете один над другим? Разумеется, более эффективно проверять $wp_query->is_search на $wp_query->is_search() ?

Изменить : было бы неплохо получить ответ, связанный с методами WP_Query . Несмотря на то, что я ценю ответы, они оба ссылаются на глобальные функции is_* а не на методы класса, что я имею в виду

Solutions Collecting From Web of "Почему WP_Query имеют методы, которые возвращают общедоступные свойства с тем же именем"

Хотя ваш пример is_search () является довольно тривиальным и более трудным для оправдания, обычно рекомендуется в стилях ООП использовать геттеры и сеттеры для таких вещей, как это, а не для публичных свойств, по ряду причин.

  • Инкапсуляция. Поведение is_search() возвращает логическое значение, но метод, с помощью которого он определяет, будет ли is_search() поиск, может измениться в будущем. Прямо сейчас переменная is_search устанавливается ранее в этом процессе, а затем эта функция возвращает ее. Более поздняя версия может выполнить немедленную проверку, чтобы увидеть, является ли текущий URL-адрес поисковым, в зависимости от того, как изменяется система шаблонов. Например, свойство, хотя и общедоступное, может измениться позже. Прямо сейчас он хранится как логическое, но возможно что-то вроде « search_string » может быть проверено вместо этого, а затем логическое значение, возвращаемое is_search() . Результат функции скрывает внутреннее состояние используемых переменных, потому что внешнему не обязательно знать их обязательно.

  • Публичные методы, такие как is_search() являются вашим интерфейсом, и поэтому интерфейс может оставаться более постоянным с течением времени. Лучше использовать что-то, что с меньшей вероятностью изменится ( is_search() будет когда-либо возвращать логическое, реалистично).

  • Многие другие библиотеки и системы развития знают о геттерах и сеттерах и работают лучше, когда они существуют. Это общий выбор стиля, лучше всего подходит для формы.

  • Классы, которые наследуются от вашего класса, могут изменить то, как работают фундаментальные основы, и эти функции позволяют им использовать их для переопределения поведения. Необходимость держать переменные общедоступными и модифицировать их внутренне сложнее и подвержена ошибкам.

  • Функции, даже методы объектов, могут передаваться как обратные вызовы для таких функций, как функции фильтра и т. Д. Переменные не могут.

Итак, реальный ответ на ваш вопрос заключается в том, что переменная is_search, вероятно, не должна быть общедоступной. Существующий метод относительно нормальный.

При кодировании код защищается. Даже если вы можете напрямую обратиться к переменной is_search() вместо этого используйте is_search() . Если переменная вообще изменится в будущем, функция изменится, чтобы разместить ее, и все равно даст правильный результат.

Делает это проще для людей, которые начинают работать с развитием, которые используются только для использования тегов шаблонов функций, то есть is_single() , is_archive() т. Д., Не заставляя их проходить краш-курс по ООП. Это и он позволяет избежать другой глобальной декларации для $wp_query я полагаю. На семантическом уровне код выглядит более чистым, если вы используете теги шаблонов вместе с have_posts() , the_post т. Д. В шаблонах, а не смешиваете в чеках против $wp_query .

Изменить: Что касается эффективности, мой C довольно ужасен, поэтому я не могу окончательно взглянуть на интерпретатор и посмотреть, как вызов функции сравнивается с доступом к публичному свойству, но я готов поспорить, если вы сравните его, чтобы результаты были незначительными.