Альтернативный синтаксис PHP

альтернативный синтаксис php

От автора: зачем нужен альтернативный синтаксис PHP. При написании приложений очень удобно отделять логику скрипта от его представления (шаблона). Более того, такой подход считается наиболее правильным.

Верстальщику совсем не обязательно знать язык программирования, чтобы изменять дизайн. Для него главное – знание HTML структуры документа. В данном случае разметка более приоритетна, чем сам код программы.

Именно для этого и используется альтернативный синтаксис PHP. Его используют в виде вставок в HTML разметку. Код должен быть максимально понятен, поэтому он упрощён для удобства верстальщика.

Примеры использования альтернативного синтаксиса

Рассмотрим примеры использования синтаксиса. Например, для вывода переменной внутри HTML структуры нужно написать:

<?php echo $string; ?> 

В альтернативном варианте это можно записать как:

<?= $string ?> 

Не правда ли удобно?

Управляющие структуры PHP

Управляющие структуры также могут быть записаны в альтернативном виде. Это позволяет не только выводить переменные в шаблоне, но и прописывать условия вывода определённых данных, различные циклы.

Цикл foreach

Цикл foreach можно записать так:

<? foreach ($array as $item): ?>
<li><?=$item?></li>
<? endforeach; ?>

В данном случае вместо фигурных скобок используется закрывающее выражение endforeach. Также обратите внимание, что открывающая конструкция завершается двоеточием, а закрывающая – точкой с запятой.

Также в альтернативном варианте можно записать такие структуры: for, while, if-else, switch-case.

Рассмотрим примеры.

Цикл for

<? for ($item = 1; $item <= 10; $item ++): ?>
<li><?= $item ?></li>
<? endfor; ?>

Цикл while

<? while ($item < 10): ?>
<li><?= $item ?></li>
<? endwhile; ?>

Условный оператор if-else

<? if ($item > 10): ?>
Значение больше десяти.
<? elseif ($item < 10): ?>
Значение меньше десяти.
<? else: ?>
Значение равно десяти.
<? endif; ?>

Конструкция выбора switch-case

В случае оператора switch нужно обратить внимание на то, что нельзя разрывать условие и первое выражение.

<? switch ($item):
case 1: ?>
Значение равно 1.
<? break; ?>
<? case 2: ?>
Значение равно 2.
<? break; ?>
<? case 3: ?>
Значение равно 3.
<? break; ?>
<? default: ?>
Значение не известно.
<? endswitch; ?>

Умея пользоваться альтернативным синтаксисом, вы сможете грамотно оформлять шаблоны для своих скриптов. Это поможет вам писать код понятно и красиво.

киберсант-вебмастер

Автор: Алексей Опанасенко

Редакция: Рог Виктор и Андрей Бернацкий. Команда webformyself.

E-mail: contact@webformyself.com

Курс по программированию на языке PHP

Изучите PHP с нуля до результата!

Смотреть курс

Метки:

Комментарии Вконтакте:

Комментарии Facebook:

Комментарии (34)

  1. Tom

    Привет, кэп!

  2. Frie

    И зачем такой трэш нужен?! не правда ли много скобок и знаков вопроса, зачем так изголяться. Я не понимаю тех кто пишет пхп классами и делает шаблонами, ведь у меня обычный говнокод работает в несколько раз быстрее а это я считаю главное. А те кто заморачивается — зануды и нубы

    • Never Lex

      Более чем глупо так утверждать. Говнокод работает пока это детские шалости. На серьёзном проекте говнокод неприемлем.

    • Евгений

      Сколько програмируешь неделю-две?

  3. Андрей

    ничего не понятно(

  4. greycoder

    Та фиг с два это удобно. Сокращение на три буквы (php :) ) оборачивается потом не работой кода на многих хостингах, если там отключена короткая запись. Да и незачем верстальщику лезть в пхп. Или если уже лезет, то пусть основы разберет. Благо порог вхождения пхп низкий…

    • Never Lex

      Сокращение больше, чем на 3 буквы, а хостинги, которые не понимают альтернативного синтаксиса, я бы советовал обходить стороной.

      Верстальщику приходится тесно контактировать с кодом. Это правда жизни.

      Если придуманы определённые стандарты записи кода, стоит у ним прислушиваться только потому, что: 1) они придуманы не просто так, 2) другие программисты их тоже знают. А ваши личные стандарты не знает никто кроме вас.

  5. Наталия

    Спасибо!!!

  6. Александр

    Спасибо. Очень интересно и полезно.

  7. Пётр

    Благодарю, «В случае оператора switch нужно обратить внимание на то, что нельзя разрывать условие и первое выражение.» про это не знал!

  8. Максим

    Сложновато…

  9. SCOFIELD

    Фигня полная

  10. Константин

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

    • Never Lex

      Ничего страшного. Вы ещё придёте к тому, что это удобно.
      Я вначале тоже не понимал особого смысла в оформлении шаблонов и много чего ещё. Даже БД предпочитал не использовать. С опытом приходит понимание, что это очень удобно и эффективно.

  11. Сергей

    привет я все не могу понять что такое пхп что такое переменная да я не спорю тут пишут как делать а что такое это обозночает не кто не знает

    • igvalor

      1. Статья, очевидно, не для тех, кто еще только хочет начать писАть на ПХП. Ищите в гугле учебник PHP скачать бесплатно (или torrent).
      2. Есть подозрение, что комментарий сей размещен здесь с целью постебаться.

    • Never Lex

      Советую посетить сайт php.su.

  12. Александр

    Прочёл статью, но кроме запутанной ерунды на самом деле не увидел(да простит меня автор, при всём к нему уважении).

    Во-первых, все эти записи(посты автора) на самом деле не являются альтернативным синтаксисом PHP(это уж явно чушь полная), а лишь показывают, как можно использовать при написании сценариев сокращённую форму записи кода на языке PHP.

    Во-вторых, хотя, возможно, должно быть первым отмечено, сокращённая запись кода возможна лишь в том случае, если в интерпретаторе включена директива short_open_tag, а тут сразу стоит заметить, что у 95% хостингов и провайдеров, предоставляющих хостинг, данная директива напросто отключена и на это есть свои причины, ибо уже давно через этот функционал имеется брешь, до сих пор не закрытая и масса не соответствий, в ходе которых код не выполним или выводится в браузер с ошибками(и это уже практика, а не ученический разбор возможностей интерпретатора/языка) да и в 6 версии PHP планируется убрать из интерпретатора эту возможность/запись. Многие, если не все(за редким исключением), уже давно отказались от использования такого рода сокращений.

    Теперь, что касается подхода в таком написании. Излишнее количество тегов открытия и закрытия сценария PHP, как встраиваемых в html не просто перегружает код, но ещё и запутывает, как было сказано выше и для «программиста» такой подход в написании — это будут просто каторга. А если помимо html разработчики будут использовать в своих проектах сценарии XML? Как вы собираетесь беспрепятственно его на полную использовать с формой сокращения php? Из вёрстки, программеру главное чётко понять суть(стиль, задумку) верстальщика, дабы всё это водрузить в решение, а не сидеть разгадывать загадки. Да и правильно было выше замечено, верстальщику не зачем лезть в PHP, его дело вёрстка, каждый должен заниматься своим делом.

    И ещё, пусть не обижается автор, но с синтаксисом PHP не мешало бы ещё поработать и почитать мануалы. Как я понял, то автор просто скопировал(может я и ошибаюсь, но выглядит так) форму записи операторов, не придавая значению важности в написании и использовании такого варианта. Я не утверждаю, что это грубейшая ошибка(интерпретатор проглотит этот код и даже, возможно всё правильно в коде отработает, но это будет лишь работать на простых примерах), но всё же ошибка. А запись конструкции switch порой просто наводит улыбку, такое ощущение, что многие просто не знают, как работает switch, не буду вдаваться в подробности, но существует три варианта использования данной конструкции, о чём можно прочитать в мануалах. Отсутствие фигурных скобок в операторах цикла так же может привести к ошибкам, даже в том варианте записи, как было сделано автором.

    Вывод на мой взгляд(многие понимающие меня, думаю поддержат): использование такой формы записи кода определённо не оправдано!

    • Never Lex

      Во-первых, наберите в гугле «альтернативный синтаксис php» и посмотрите сколько ещё людей ошибается.

      Во-вторых, такой синтаксис активно использую, а не просто скопировал (это уже совсем беспочвенные домыслы). Никаких глюков пока не замечено. На счёт уязвимостей ничего не знал (если это действительно так конечно). Было бы неплохо подкрепить свои слова ссылкой.

      На счёт удобства шаблонизации можете высказывать только своё личное мнение. С вашей точки зрения это удобно, а с точки зрения другого человека неудобно. Не знаю даже как можно отделить полностью вёрстку от программной части. Так чтобы верстальщик вообще не сталкивался с кодом нив каком виде. Если вы знаете, пожалуйста, расскажите.

      В любом случае спасибо за такой развёрнутый комментарий. Жаль только стиль написания его ужасно занудный и высокомерный.

      • Александр

        Не нужно советовать то, в чём, как я теперь понял, Вы слабо разбираетесь!

        Да хоть пусть тысячи ссылок выскочат в гугле, если Вы сами не можете отличать элементарных понятий, то зачем было вообще оставлять эти посты?! Я, кстати, аналогично могу Вас отправить на сайт, только не на php.su, куда Вы направили Сергея, а на сайт разработчика(php.net) для глубокого понимания затронутого Вами вопроса, ибо для меня только этот сайт является основным источником получения любой информации по PHP. Честно говоря, мне не понятна позиция и идеология помощи с Вашей стороны, если уже в первых постах, Вы отказываете в помощи тем, кто задал вопрос. Ну и что, что человек не знаком с языком PHP? А что, Вы сразу стали всё понимать и осознавать? Я согласен, что для полного понимания того, о чём спросил Сергей, можно было направить на сторонние ресурсы инета, но Вы же считаете ниже своего достоинства дать ответ в одно предложение Сергею, что такое PHP(гмм…).

        Мне очень жаль, что Вы, извиняюсь за выражение, «смешиваете хлеб с маслом», ибо, если для Вас «Альтернативный синтаксис PHP» и «Alternative syntax for control structures(Альтернативный синтаксис управляющих структур)» — одно и то же, то о каком доверии к Вашим знаниям и словам может идти речь?! Вы просто затуманиваете мозги людям, малосведущим в этом вопросе.

        И позволю себе заметить, коль Вы завели речь о моём стиле письма, назвав его занудным и высокомерным, то Вы, читая строки моего комментария, таким образом сами показываете свое высокомерие и неуважение к собеседнику на том лишь основании, что Вам было сделано уместное замечание, с которым Вы просто не согласны, но показали это в неуважительной форме по отношению к собеседнику. И смею заметить, если уж провести анализ, мой стиль письма куда понятнее и доступнее изложен, чем в Вашей статье, где элементарные вещи Вами изложены столь заумно и запутанно — тому свидетельствует уже ряд топиков комментариев выше и ниже моего!

        Теперь вернусь к основному вопросу темы.
        В природе затронутого языка нет никакого альтернативного синтаксиса PHP(подчёркиваю это)! Есть язык программирования PHP, который имеет соответственно, свой синтаксис(форма записи сценариев-скриптов для разработки приложений). А ещё есть интерпретатор языка, которому написанные сценарии передаются для обработки и вывода сформированных данных в браузер, не буду в данном вопросе затрагивать компилятор языка, но он в каком-то смысле, то же имеет отношение к сути вопроса.
        Если же ещё рассматривать и Объектно-Ориентированную направленность языка, то это ко всему ещё и условно-независимая среда, которая во взаимосвязи с ассемблером даёт огромную мощь и поле деятельности программисту-разработчику.

        Так вот, расшифровывая, повторюсь, есть синтаксис языка PHP, имеющий свои особые логические правила и некоторые законы записи сценариев и порядок последовательности в создании сценария-приложения и его использовании, причём, многие вещи заимствованы из языка С(си) (и замечу, пока эти правила синтаксиса никто не менял и не отменял, PHP был и пока остаётся тем, каким был изначально создан), а есть интерпретатор, которому написанные сценарии передаются для обработки. И именно от того, насколько правильно написан синтаксис сценария языка PHP зависит, как будут выведены данные в браузер и будут ли выведены вообще, при наличие ошибок, интерпретатор напросто прекратит выполнение сценария, если столкнётся с теми или иными ошибками.

        Теперь о самом синтаксисе языка PHP.
        В выше сказанном, замечу, нигде не используется понятие или термин(понимайте, как уж Вам ближе) альтернативного синтаксиса языка PHP.
        Я прошу автора дать ссылку на страницу сайта разработчика, где чёрным по белому написано о существовании «Альтернативного синтаксиса языка программирования PHP». Только прошу не посылать меня на страницу http://www.php.net/manual/en/control-structures.alternative-syntax.php, где рассматривается разработчиками функциональная возможность интерпретатора языка PHP(подчёркиваю, интерпретатора, а не синтаксис языка) вести Альтернативную запись некоторых синтаксически-управляющих структур, а именно: if, while, for, foreach, и switch.
        При записи сценариев с использованием этих структур допускалась сокращённая форма, в которой вместо открывающих выражение конструкции фигурных скобок может быть поставлено :( двоеточие), а в качестве закрывающих, используются резервированные слова операторов в связке с «end», то есть: endif;, endwhile;, endfor;, endforeach;, или endswitch.

        И вот тут автор смешивает понятие Альтернативного синтаксиса языка PHP и Альтернативного синтаксиса управляющих структур, поддерживаемых интерпретатором, это совершенно разные понятия, несмотря на схожесть записи понятий.
        Под Альтернативным синтаксисом управляющих структур понимается принятая разработчиками форма условного сокращения записи выше названных структур, которую интерпретатор языка воспринимает, как основной, изначально разработанный синтаксис языка PHP, точнее говоря, интерпретатор делает замену ряда символов, допускаемых в альтернативной записи выше названных структур, на символы общепринятого синтаксиса, который так же распространяется и на эти структуры, и пока их никто не менял, согласно записей разработчиков, и никаких изменений в сам синтаксис языка не вносится.

        Проще говоря, в интерпретаторе была введена(кстати ещё во второй версии и в ряде последующих версий развивалась, но не долго), функция для записи некоторых условных сокращений внутри логики синтаксиса сценария, но не самого языка. Только для этого в интерпретаторе должна быть включена директива short_open_tag на «on», в противном случае, все эти сокращения в интерпретаторе будут восприниматься, как синтаксическая ошибка и будет выведена соответствующая запись в браузер или файл!

        И замечу, что, действительно, эта альтернативная форма, форма сокращений, введённая разработчиками в интерпретатор, но не язык, долгое время пользовалась популярностью. Но с развитием мощи интерпретатора и возможностей самого языка, введённая форма сокращений стала создавать ряд непредвиденных ситуаций, в особенности, когда речь заходила о массивных проектах и многомерных конструкций. Это приводило к тому, что ранее работоспособный код становился не работоспособным. И, в первую очередь, это коснулось приложений, использующих альтернативный синтаксис структур, написанных для более ранних версий интерпретатора. Но и это оказалось не всё, наши умные пользователи, нашли возможность использовать данную возможность сокращений в своих целях, — для проникновения внутрь кода, в том числе, используя хитроумные скрипты, и в сердце сервера. Разработчики видя это, прекратили проект по развитию альтернативной формы интерпретатора уже на стадии 5-й версии и сейчас лишь поддерживается этот функционал лишь потому, что ещё много проектов в сети, написанных с использованием сокращений. И уж не знаю, как долго они его будут поддерживать, но разработчики заявили, что в 6-й версии они намерены уже отказаться от ранее принятой формы сокращений. Я склонен им верить.

        Теперь об удобстве и шаблонизации.
        Не скрою и спорить не буду, да, действительно, в идеале, использование идеологии разделения кода приложения на шаблон, точнее, на его дизайнерскую часть и на структурный программный код — это оправдывается с лихвой, и это, действительно, правильный подход в написании приложений. Тут мне нечего добавить. Только написание подобных сценариев старыми методами уже явно не оправдано.

        Автор ссылается на то, что он активно использует в свой практике старые методы, применяя сокращения, ну что ж, в это м я не вижу ничего дурного, но не нужно стоять на месте. Из сказанного автором могу сделать вывод, что он применяет альтернативную запись структур в простых приложениях, но достаточно написать многомерную конструкцию, как код прекращает восприниматься интерпретатором и выводится синтаксическая ошибка, либо, исправляя ошибки, добавляя в нужных местах конструкции дополнительные конструкции, двоеточия и end-ы, код становится не читабельным, запутанными и по больше части опять приводящий в итоге к неработоспособности. Вот Вам для разнообразия, напишите сценарий того же калькулятора, воспользовавшись условными сокращениями и попробуйте запустить в интерпретаторе, желательно 5-й версии, сами уведите реакцию интерпретатора на написанный сценарий.

        А что касается вопроса разделения на шаблоны, то эта задача прекрасно решается использованием классов и объектно-ориентированного подхода в написании приложений, чем я занимаюсь последние года 4 и результатом доволен.

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

        То ли дело, вызвал функцию, класс или объект из библиотеки, сделав запись в 3-5 сток, а порой и в одну(в сложных проектах может быть больше, но там и требования к решению поставленных задач выше), отправил в них нужные данные, там же код выполнился и нам вернулся готовый результат, идущий уже в браузер или ещё куда, взаимозависимости от поставленных задач.
        Вот это я понимаю, логически грамотный и верный подход в решении задач, поставленных при проектировании приложений, от простых, до самых сложных.

        Вот, вроде всё разъяснил и расписал для полного понимания вопроса.

        Я нисколько не собираюсь никого в чём-то переубеждать или склонять на свою сторону. Сколько людей, столько и мнений, но иногда нужно правде смотреть в глаза.
        В данной теме автор не открыл ничего нового и сверхъестественного, ибо данный функционал стар, как мир(в широком смысле слова, разумеется) и на мой взгляд, иногда стоит прислушиваться к мнениям других, а не с пеной изо-рта доказывать свою позицию. Можете оставаться и при своём мнении, Ваше право, его у Вас никто не отбирал, но кому-то, наверняка мои разъяснения помогут понять суть вопроса глубже и стоит ли в дальнейшем использовать форму сокращений, если в один прекрасный день выйдет версия интерпретатора, не поддерживающего данный функционал.

        А в качестве рекомендаций, я со своей стороны, автору, в силу его молодости и вспыльчивости, хотел бы дать совет, быть на будущее не много спокойнее, терпимее, уважительнее и коль Вы решили написать статью, поделиться какими-то интересными мыслями, идеями, предложениями, Вы должны быть готовы к тому, что кому-то это не понравится, кто-то придерживается другой идеологии, а кому-то требуется дополнительное разъяснение, где Вы должны быть на высоте.

        Но…как говорится, не допускает ошибок лишь тот, кто ничего не делает, так что автору отдельное Спасибо и успехов в дальнейших начинаниях!!!

        • Never Lex

          Александр, ваш комментарий вышел очень информативным и полезным. Спасибо. Действительно, я не теоретик, а практик. И мануалы от разработчика я читаю редко. Это вызвано тем, что я самоучка, не учился программированию ни в каких институтах, и предпочитаю рабочий код теоремам и терминам, следовательно у меня немного «неправильное» с точки зрения программиста мышление. Этого же хотят и посетители данного сайта — рабочего кода и поменьше теории. Но в любом случае теория важна и её нужно уделять внимание.

          Если термин не совсем верен, то приношу свои извинения. Пусть будет «альтернативная запись синтаксически-управляющих структур». Я не против.

          Дело в том, что я как раз использую практику ООП и мои шаблоны разбиты на множество частей. Шаблоны эти я вызываю именно функцией, в которую отправляю нужные переменные. Просто мне удобно записывать их в таком виде. К тому же такую манеру записи мне подсказали очень авторитетные люди, к мнению которых я прислушиваюсь.

          Удачи.

        • Антон

          Александр вам огромное спасибо за то что разъяснили все я только учюсь и уже давно присматривался к такому коду который описывает автор Но теперь понял что лучше лишний раз поставить {} и код будет легко понятен Еще раз спасибо

          • Виктор Владимирович

            Когда здоровые страницы и их много , альтернативный синтаксис реально лучше читается в шаблонах. А так дело привычки :)

        • Дмитрий

          Обстоятельный ответ. Добавлю, что развернутое такое обсуждение и, в итоге, консенсус, с лихвой окупают некоторую нервозность первоначальную. И данный материал полезен — поднял вопрос, а обсуждение дает знания и опыт новичкам. Мало ли где встретится новичку код в таком стиле и он будет ломать голову, как с ним поступить и что там вообще происходит, и как вообще оптимальнее писать
          :)

          Спасибо автору, спасибо всем комментаторам.

        • tilast

          Действительно, Александр дал поучительный комментарий. Но все же, как тогда разделять дизайн и код не старыми, а, как писалось, новыми методами? То есть нужно про в файле шаблона выводить всё в echo? А если верстальщик только на мигах знает что такое PHP? Какие методы использовать тогда, если не эти альтернативные записи некоторых синтаксически-управляющих структур? Или просто использовать другой шаблонизатор, не такого типа?
          P.S. Извините, если ответ на мой вопрос был в комментарие, но я его не понял.

  13. Олег

    из этого мне нравится лиш
    endforeach и endwile писать дольше.
    greycoder, мне не попадалось таких гостингов, де я не змог бы написать <?, за место <?php, в любом случае shortopentag=on решает проблему.
    О безкоштовних я молчу, там у них редко что-то робит нормально.

  14. Sewell

    Пользуюсь. Удобно. С этим согласен.
    Спасибо за статью!

  15. Гулия

    Спасибо. Хотя немного и сложновато для понимания :)

  16. Grigorii

    Я КОНЕЧНО ОТСТАЛ но согласен с автором не с целью поучения но в практическом варианте прямо в практику ка это преподавал автор Максим НЕГОДОВ ОН РАНЬШЕ был в вашей команде а может и сей часс ??? акак он смотрит на тему практичного хода применимости и дальнейшого исследования в практике

  17. Виктор Владимирович

    Спасибо за подсказочку! Забыл как закрывается foreach(), а тут раз и напомнили.
    В комментах читал, что сложно для понимания, я немного в шоке, что тут понимать то?

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Можно использовать следующие HTML-теги и атрибуты: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

Я не робот.

Spam Protection by WP-SpamFree