Intereting Posts
Как искать в поле, в котором хранятся строки с экранированием? Временное сохранение основного результата поиска Каковы некоторые хорошие ресурсы для обучения конечных пользователей использованию WordPress? Запрос пользовательского цикла на основе настраиваемого поля Symlink – каталог для wp-контента / тем Как я могу отображать все многосайтовые блоги, где этот пользователь является администратором? Планирование публикации новой версии существующих результатов страницы в 404 Как зарегистрировать пользовательскую ошибку плагина в файле debug.log Как получить список продуктов с идентификатором категории в WordPress Почему «Вызывать функцию-член на не-объекте» только в плагине? Добавление пользовательских полей на странице Многопользовательские пользователи Как искать изображения и получать его ссылку? Вход в WordPress с использованием данных внешней базы данных Управление пользователями для пользователей, у которых нет адреса электронной почты Крючки для сохранения сообщений делают post-new.php для загрузки данных последнего сообщения

Почему 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 довольно ужасен, поэтому я не могу окончательно взглянуть на интерпретатор и посмотреть, как вызов функции сравнивается с доступом к публичному свойству, но я готов поспорить, если вы сравните его, чтобы результаты были незначительными.