Что означают %s, %1$s и подобные конструкции?

27 сент. 2013 г., 17:15:42
Просмотры: 89.9K
Голосов: 18

Изучая Q&A темы, я столкнулся с некоторыми старыми конструкциями, но обнаружил, что до сих пор не понимаю их значение и цель использования.

  • %1$s - (используется для загрузки ID виджета)
  • %2$s - (используется для загрузки класса/классов виджета)
  • %s - (найдено здесь)

И как работают следующие конструкции? То есть, какое объяснение у этого формата кода?

  • !Website::getThemeOption("format_post/{$post_format}/content/hide")): - (найдено здесь)
  • if( !wp_verify_nonce( $_POST['my_noncename'] ) plugin_basename( __FILE__ ) ) return; - (найдено здесь)

Я понимаю, что этот вопрос можно продолжать бесконечно... Но такие вещи нигде четко не объясняются. Я хочу не просто узнать их значение и цели, но получить внутреннее/базовое объяснение, чтобы понять их мотивы и принцип работы.

Кроме того, если такие вещи уже четко определены в Codex, я бы с удовольствием их прочитал. И хотелось бы иметь список таких интересных конструкций, если такой список уже где-то составлен.

7
Комментарии

Это чистый PHP. Смотрите sprintf().

fuxia fuxia
27 сент. 2013 г. 17:23:58

Кодекс существует для предоставления WordPress-специфичной документации. Он не предназначен для обучения программированию на PHP, и все ваши вопросы касаются программирования на PHP. Документацию по PHP можно найти на php.net, а множество учебных материалов для начинающих легко найти через Google.

Ben Miller Ben Miller
27 сент. 2013 г. 17:50:03

@BenMiller: Пожалуйста, наберитесь терпения. До комментария toscho я даже не знал о существовании этого вопроса. Теперь с ответом Дэйва ситуация практически прояснилась.

Mayeenul Islam Mayeenul Islam
27 сент. 2013 г. 17:56:38

@MayeenulIslam, я просто пытался объяснить, почему вы не найдете таких объяснений в Codex. Извините, если это прозвучало как нетерпение.

Ben Miller Ben Miller
27 сент. 2013 г. 18:08:41

@BenMiller-RememberMonica, я также воспринял это как нетерпение, поскольку мое первое впечатление — то, что вы предлагаете закрыть Stack Exchange, так как почти все задаваемые вопросы можно найти в руководствах, а любые конкретные вопросы можно вывести с помощью творческого мышления. :-) В любом случае, да, Codex — отличный инструмент, но в данном вопросе поток направляет Google ;)

Yannis Dran Yannis Dran
10 мар. 2022 г. 13:38:15

@YannisDran Этот сайт (Wordpress.SE) предназначен для вопросов, специфичных для WordPress. Общие вопросы о программировании на PHP относятся к StackOverflow. Мой комментарий о Codex был ответом на предложение в вопросе автора, где он удивлялся, почему не смог найти ответ на свой вопрос в Codex.

Ben Miller Ben Miller
10 мар. 2022 г. 13:43:42

@YannisDran Наконец, когда я написал слова «все ваши вопросы», я не имел в виду другие посты автора; я говорил о множестве вопросов в этом посте, все из которых не соответствуют тематике данного сайта, и ни на один из них не будет ответов в Codex, потому что они не касаются WordPress.

Ben Miller Ben Miller
10 мар. 2022 г. 13:50:19
Показать остальные 2 комментариев
Все ответы на вопрос 1
4
14

Это, скорее, общий вопрос по программированию на PHP, и он может быть закрыт по этой причине. Но прежде чем это произойдет, давайте попробуем разобраться.

Строки, начинающиеся со знаков %, используют "формат printf". Например, %2$s означает "замени этот токен вторым параметром и обработай его как строку".

Когда вы видите переменную в фигурных скобках внутри строки, например "Сегодня {$day}", это то же самое, что и без скобок — "Сегодня $day". Но такой формат делает переменную более заметной и предотвращает интерпретацию соседних символов как части имени переменной. Без фигурных скобок, как бы PHP понял, что делать с "Имя вашего робота будет {$firstName}Number5"? Он бы увидел "$firstNameNumber5" и попытался бы найти переменную с именем $firstNameNumber5 вместо просто $firstName.

Не совсем понятно, о чем идет речь в последнем примере. Вас смущает __FILE__? Это магическая константа PHP, которая заменяется на полный путь к файлу, содержащему этот код.

27 сент. 2013 г. 17:33:22
Комментарии

Перед закрытием последний простой вопрос: !Website::. Почему здесь двойное двоеточие?

Mayeenul Islam Mayeenul Islam
27 сент. 2013 г. 17:44:23

:: связано с объектно-ориентированным программированием — в случае Website::getThemeOption вы вызываете функцию getThemeOption, принадлежащую классу Website.

Pat J Pat J
27 сент. 2013 г. 17:55:23

Также: {$var} помогает PHP различать такие вещи, как {$complete_variable_name} и {$prefix}_rest_of_name, например.

Pat J Pat J
27 сент. 2013 г. 17:57:15

Двойное двоеточие (::) используется для доступа только к статическим или переопределённым методам и свойствам класса. Для обычных методов используется стрелка ->, например: $myObject->someMethod();

ed-ta ed-ta
11 июн. 2015 г. 19:56:45