Чи прийнятні для використання короткі теги PHP?


522

Ось інформація згідно з офіційною документацією :

Існує чотири різні пари тегів відкриття та закриття, які можна використовувати в PHP. Два з них, <?php ?> і <script language="php"> </script>, завжди доступні. Інші два - це короткі теги та теги стилю ASP, і їх можна включати та вимикати з файлу конфігурації php.ini. Таким чином, хоча деякі люди вважають короткими теги та теги стилю ASP зручними, вони менш портативні і, як правило, не рекомендуються .

З мого досвіду більшості серверів дійсно включені короткі теги. Введення тексту

<?=

набагато зручніше, ніж набирати текст

<?php echo 

Зручність програмістів є важливим фактором, тому чому їх не рекомендують?


61
Як відповідь на whyчастину, я б процитував посібник із сертифікації Zend PHP 5: "Короткі теги, певний час, були стандартом у світі PHP; однак вони мають головний недолік конфлікту з заголовками XML і, отже, мають дещо впала обочиною ».
Пухнастий

7
Який випадок використання, коли виникає ця проблема, чи означає це, що розробникам створюється біль для створення XML за допомогою PHP?
Jon z

9
Скажімо, у вас є документи XML, які ви хочете опублікувати, але ви хочете, щоб документи з будь-якої причини були синтаксичними для аналізу, щоб ви зробили .xml синтаксичним для свого браузера. Ви використовуєте короткі теги, щоб вони увімкнулися, і раптом документ XML розбирається через заголовки XML, ламаючи речі. Скинь мене, намагаючись зрозуміти це давно. З тих пір, коли короткі коди були відключені на будь-якому сервері, на якому я працюю, і будь-якій команді, з якою я працював, довелося вдаватися до не короткого коду
thenetimp

43
З PHP 5.4.0 директива short_open_tag не включає короткий тег ехо <?= $example;?> ! Це дуже важливо, оскільки використання всіх інших коротких міток вважається марним. У будь-якому випадку відтепер рекомендується використовувати короткий тег ехо. Це забезпечує більш гладку та акуратну базу коду - esp. у перегляді файлів. Тож для PHP> = 5.4.0 <?= ?> можна використовувати без налаштування short_open_tag . Будь ласка, не використовуйте інші короткі теги у вашому коді. Коди-Боги дуже зляться, коли ти це робиш ...
Борислав Сабев

6
Я збираюся додати це як швидкий коментар, тому що вже є занадто багато довгих відповідей: <?використовується не тільки в XML для вступної <?xml version="1.0" ?>декларації; це загальний синтаксис "інструкцій з обробки", другий найпоширеніший приклад - це <?xml-stylesheet ... ?>. <?phpнасправді можна вважати дійсною інструкцією по обробці, як це можливо <?=(як це дозволено в 5.4+), але стверджуючи, що ціле <?також добре, створює непотрібний конфлікт між синтаксисами.
IMSoP

Відповіді:


374

Вони не рекомендуються, оскільки це PITA, якщо вам коли-небудь доведеться перенести свій код на сервер, де він не підтримується (і ви не можете його включити). Як ви говорите, багато спільних господарів зробити підтримку shorttags але «багато» не всі з них. Якщо ви хочете поділитися своїми сценаріями, найкраще використовувати повний синтаксис.

Я погоджуюсь, що <?і <?=програмістам простіше, ніж <?phpі, <?php echoале це можливо зробити масовий пошук і заміну, якщо ви кожен раз використовуєте ту саму форму (і не чіпляйте пробіли (наприклад: <? phpабо <? =)

Я зовсім не купую читабельність як причину. Більшість серйозних розробників мають доступне для них виділення синтаксису.

Як згадує ThiefMaster в коментарях, станом на PHP 5.4, <?= ... ?>теги підтримуються всюди, незалежно від налаштувань коротких тегів . Це означає, що вони безпечні для використання в портативному коді, але це означає, що тоді існує залежність від PHP 5.4+. Якщо ви хочете підтримувати до-5.4 і не можете гарантувати ярлики, вам все одно доведеться користуватися <?php echo ... ?>.

Крім того, вам потрібно знати, що теги ASP <%,%>, <% = та тег сценарію видалено з PHP 7 . Тож якщо ви хочете підтримати довгостроковий портативний код і хочете перейти на найсучасніші інструменти, подумайте про зміну цих частин коду.


91
Отже, пояснення таке: Вони погані, тому що їх не підтримують? Але чому їх не підтримують? Тому що вони не входять до специфікації? Гаразд, але чому вони не входять до специфікації? Я трохи розчарований цією відповіддю.
Йозеф Сабл

61
Я не тут, щоб обговорити "великі питання", наприклад, чому ми тут, як все почалося і т. Д. Підтримка коротких тегів не гарантується на спільних серверах, і вона повністю видаляється наступною основною версією. Це все, що потрібно знати.
Олі

39
Обов’язковий PHP - це шаблон двигуна. : P
Помилка синтаксису

49
Короткі теги не припиняються. Тільки короткі теги стилю ASP.
Брайан Лейсі

46
У (найближчому) майбутньому PHP 5.4 використання <? = Буде відокремлено від того, включені або вимкнені short_open_tags. <? = не припиняється, навпаки, зараз вона вважається фундаментальною частиною мови.
Містер Грівер

175

Я занадто люблю, <?=$whatever?>щоб відпустити це. Ніколи з цим не було проблем. Я зачекаю, поки він не вкусить мене в дупу. Всерйоз, 85% (моїх) клієнтів мають доступ до php.ini в рідкісний випадок, коли їх вимкнено. Інші 15% використовують провідних хостинг-провайдерів, і практично всі вони ввімкнули їх. Я люблю їх.


41
@B Seven Якщо ви спробуєте уникнути будь-якої теоретичної проблеми, яка може виникнути, ваш код майже точно буде неефективним і невдалим. Поки група PHP не погодиться викреслити короткі теги [не теги ASP], турбота про покусання набагато менше, а потенційне рішення набагато простіше, ніж інші речі, на які ви можете витратити свій час "на виправлення".
SamGoody

18
якщо вас вкусить, перейдіть на кращий хостинг
Lie Ryan

4
Я не дуже згоден з тим, щоб щось не використовувати, тому що це може не підтримуватися. Чи не слід використовувати жодну з інших функцій, які можуть не підтримуватися на сервері? MYSQL проти MYSQLI? Ви витрачаєте час потроху, знову і знову пишете довгі теги, просто щоб уникнути крихітного шансу витратити трохи часу на перехід на кращий хост.
Дін або

2
@BSeven, Ви маєте на увазі, що не використовуєте розширень PHP, за винятком завантажених за замовчуванням?
Pacerier

143

Починаючи з PHP 5.4, ярлик ехо є окремою проблемою від коротких тегів, оскільки ярлик ехо завжди буде увімкнено. Зараз це факт:

Тож ярлик ехо (( <?=) зараз безпечний для використання.


19
Я б сказав, що це єдиний необхідний "короткий тег". <?phpможе використовуватися на початку всіх файлів класу, а потім у вас є <?=для ваших поглядів. безпрограшний.
Xeoncross

6
So the echo shortcut itself (<?=) is safe to use... до тих пір, поки вам комфортно потрібно PHP 5.4. Широко розповсюджені програми PHP (як Wordpress) не вимагають розкішних вимог 5.4, і навіть надалі пропонують підтримку PHP 4 до 2011 року - цілих 7 років після виходу PHP 5. Якщо ви знаходитесь у такому місці, як facebook, де всіма установками вашого програмного забезпечення безпосередньо управляє сама компанія, то вимагати підтримки 5.4 набагато простіше, ніж якщо ви працюєте над таким проектом, як wordpress.
Френк Фермер

@dukeofgaming, Нічого не вдається, не знав, що їх редакції SVN доступні в Інтернеті.
Pacerier

82

Проблема з усією цією дискусією полягає у використанні PHP як мови-шаблону. Ніхто не сперечається з тим, що теги слід використовувати у вихідних файлах додатків.

Однак вбудований синтаксис PHP дозволяє використовувати його як потужну мову шаблонів, а шаблони повинні бути максимально простими та читаними. Багато хто вважає, що легше використовувати набагато повільніший додаток для створення шаблонів, як Smarty, але для тих пуристів серед нас, хто вимагає швидкого візуалізації та чистої бази коду, PHP - єдиний спосіб писати шаблони.

ТОЛЬКО дійсний аргумент ПРОТИ використання коротких тегів полягає в тому, що вони підтримуються не на всіх серверах. Коментарі щодо конфліктів з XML-документами є смішними, адже ви, мабуть, не повинні змішувати PHP та XML; і якщо ви є, вам слід використовувати PHP для виведення рядків тексту. Безпека ніколи не повинна бути проблемою, тому що якщо ви розміщуєте конфіденційну інформацію, таку як дані про доступ до бази даних, всередині файлів шаблонів, то тоді у вас виникають більші проблеми!

Тоді, що стосується питання підтримки сервера, правда, треба знати про свою цільову платформу. Якщо спільний хостинг є вірогідною ціллю, слід уникати коротких тегів. Але для багатьох професійних розробників (таких як я) клієнт визнає (і справді це залежить від факту), що ми будемо диктувати вимоги сервера. Часто я відповідаю за налаштування сервера самостійно.

І ми НІКОЛИ не працюємо з хостинг-провайдером, який не дає нам абсолютного контролю над конфігурацією сервера - у такому випадку ми могли б розраховувати на те, щоб працювати набагато більше проблем, ніж просто втратити підтримку коротких тегів. Це просто не відбувається.

Так, так - я погоджуюся, що використання коротких тегів слід ретельно зважувати. Але я також твердо вірю, що ЗАВЖДИ це має бути варіант, і розробник, який знає про своє оточення, повинен вільно їх використовувати.


6
Якщо з якоїсь причини у вас був налаштований apache для передачі файлів .xml до mod_php, <? Xml річ би була головним болем з короткими тегами. Але це, очевидно, химерна установка.
Френк Фермер

3
Мова шаблонів, яку неможливо вбудувати без обходу в деяких видах вихідних документів, є великою невдачею. Єдина причина, у якій я не повинен мати шаблон XML з кодом PHP та короткими тегами, це тому, що він не працює, а не тому, що він не має сенсу.
Вінко Врсалович

8
Не "великий провал" скористатися перевагами PHP як швидкої, зручної мови шаблонів. Як я вже говорив раніше, справа полягає в зважуванні переваг та недоліків та написанні коду таким чином, що відповідає обраному вами підходу. Не категорично відмовляйтесь від дійсного підходу лише тому, що він не працює в одному конкретному сценарії (який легко можна обійти).
Брайан Лейсі

5
Я категорично не відкидаю жодного дійсного підходу (див. Мою відповідь на запитання.) Ви є тим, хто категорично відхиляє PHP у XML, я цитую: "Ви ні в якому разі не повинні змішувати PHP та XML". Крім того, великою невдачею, про яку я мав на увазі, було рішення використовувати <?як короткий тег, оскільки це призводить до некрасивих методів обходу XML. З цього приводу я погоджуюся, що мова йде про зважування переваг та недоліків, і що якщо ви знаєте, чим займаєтесь, ви, безумовно, можете це зробити. Але це не робить <?вдалого вибору.
Вінко Врсалович

3
Я трохи запізнююсь на вечірку, але мені дуже подобається ця відповідь, і це відображає мій досвід ситуації. Хоча ми маємо певну незгоду з цього питання в нашому офісі, я можу сказати, що при майже щоденній роботі в php протягом багатьох років я ніколи не стикався з цим питанням. Коли PHP використовується для генерування XML, він, на моєму досвіді, завжди був у контексті високодинамічного контенту, який ніколи не був шаблонований через PHP, тому проблема просто не виникає.
redreinard

33

Короткі теги повертаються завдяки Zend Framework, що натискає на " PHP як мову шаблонів " у конфігурації MVC за замовчуванням . Я не бачу, про що йдеться в дискусії, більшість програмного забезпечення, яке ви будете виробляти протягом свого життя, працюватимуть на сервері, яким ви керуєте або ваша компанія. Поки ви будете тримати себе послідовно, проблем не повинно бути.

ОНОВЛЕННЯ

Після досить багато роботи з Magento , який використовує довгу форму. Як результат, я перейшов до довгої форми:

<?php and <?php echo

над

<? and <?=

Здається, невеликий обсяг роботи для забезпечення сумісності.


8
Я фрілансер, і весь мій код переходить на спільний хостинг, тому ніякого контролю взагалі немає! :)
MDCore

12
Якщо у вас є достатня кількість клієнтів, які переїжджають до вашої колонії, спільний хостинг небезпечний і нестабільний.
Джейк МакГрау

2
Короткі теги, які Зенд повертав, очевидно, не спіймали, оскільки Зенд використовує довгу версію: Framework.zend.com/manual/en/zend.view.scripts.html
Джеррі

3
@Gerry Я також читав це нещодавно, дивіться останній коментар до цієї
теми

2
Вам слід справді виправити граматику в першому реченні після ОНОВЛЕННЯ, що не має сенсу в її теперішній формі.
redreinard

22

Тому що плутанина може генеруватися з деклараціями XML. Хоча багато людей згодні з вами.

Додаткове занепокоєння викликає біль, яку він може створити для того, щоб кодувати все за допомогою коротких тегів, щоб в кінці кінців з'ясувати, що остаточний сервер хостингу вимкнув їх ...


Чи не все-таки декларація XML спричинить плутанину, якщо увімкнено short_tags?
MDCore

Отже, замість того, щоб безпосередньо виводити декларацію XML, у вас є PHP повторення. Це насправді не є доброю спростуванням.
пн

Це не заперечує нічого. Це єдина фактична причина, яка, в свою чергу, є причиною з іншої причини "хостер вимикає її", звичайно, ви можете використовувати її, якщо знаєте, що робите, як завжди.
Вінко Врсалович

1
@macek: Я знаю про це. Це був лише перший приклад, про який я задумався. Ще, що робити, якщо ви вставите PHP у XML-файл? Ви не можете це зробити безпосередньо. І не кажіть мені також рішення цієї проблеми, я їх знаю. Справа в тому, що існує багато способів PHP для розбору XML-файлів. Ви, ймовірно, можете відхилити їх усіх шляхом вирішення проблем ( <?='<?xml') або сказавши "ти не повинен цього робити", але це не призведе до того, що це може зникнути.
Вінко Врсалович

1
як болить короткі теги, якщо вони не працюють? його дуже легко зробити велику частину і замінити <?=з <? echo . багато текстових редакторів можуть легко впоратися, роблячи це тисячами файлів одночасно.
Яміко

20

Далі наведена чудова схема потоку того ж:

дерево прийняття рішень про використання <? =

Джерело: подібне запитання щодо обміну стеками програмного забезпечення


2
Це описує, чи слід використовувати короткий тег echo, не той самий, як <?короткий тег, згаданий у питанні (хоча він використовував той самий параметр конфігурації до 5.4)
Alok,

Насправді це має бути відповіддю, який кожен може зрозуміти, хоча обставини насправді не пояснені, чому ви не хочете використовувати короткі теги у багатьох випадках (наприклад, не в змозі змінити файл php.ini в спільній хостинговій системі)
Björn K

14

http://uk3.php.net/manual/en/language.basic-syntax.phpmode.php має багато порад, зокрема:

хоча деякі люди знаходять короткі теги та теги стилю ASP зручними, вони менш портативні, і, як правило, не рекомендуються.

і

зауважте, що якщо ви вбудовуєте PHP в XML або XHTML, вам потрібно буде використовувати <?php ?>теги, щоб вони відповідали стандартам.

і

Використовувати короткі теги слід уникати при розробці програм або бібліотек, призначених для перерозподілу або розгортання на серверах PHP, які не знаходяться під вашим контролем, оскільки короткі теги можуть не підтримуватися на цільовому сервері. Для портативного коду, що перерозподіляється, не використовуйте короткі теги.


14

У випадку, якщо хтось все ще звертає на це увагу ... Станом на PHP 5.4.0 Альфа 1 <?=завжди доступний:

http://php.net/releases/NEWS_5_4_0_alpha1.txt

Таким чином, схоже, що короткі теги є (а) прийнятними та (б) тут, щоб залишитися. Поки щонайменше ...


5
<?=не вважається коротким тегом станом на 5.4
T0xicCode

12
  • Короткі теги за замовчуванням не включаються на деяких веб-серверах (спільних хостах тощо), тому перенесення коду стає проблемою, якщо вам потрібно перейти до одного з них.

  • Для деяких читачів може бути проблемою. Багато розробників можуть виявити, що <?phpкидається в очі як більш очевидний маркер початку блоку коду, ніж <?при скануванні файлу, особливо якщо ви застрягли в кодовій базі з щільно переплетеними HTML та PHP.


2
Короткі теги включені у 95% веб-серверів.
Паоло Бергантіно

19
Я не купую аргумент "читабельності". Якщо ви використовуєте PHP як мову шаблонів, <?= $var ?>це набагато читає, ніж<?php echo $var ?>
Френк Фармер,

2
@Paulo це може змінитися з '08 року, але екземпляри EC2 Ubuntu та Fedora з yum install та apt-get версіями PHP за короткою міткою відключені за замовчуванням
Doug Molineux

2
використовуйте повні теги, і ви отримаєте 100% :)
Elvis Ciotti

1
@FrankFarmer, я думаю, що він порівнює той без відлуння. <?проти <?php.
Pacerier

11

Примітка: Починаючи з PHP 5.4 короткий тег, <?=тепер доступний завжди.


5

Я читав цю сторінку, шукаючи інформацію по темі, і відчуваю, що не було згадано одного головного питання: лінь проти послідовності. "Справжніми" тегами для PHP є <? Php та?>. Чому? Мені це зовсім не байдуже. Чому ви хочете використовувати щось інше, коли це явно для PHP? <% і%> означають для мене ASP, а <script ..... означає Javascript (у більшості випадків). Отже, для послідовності, швидкого навчання, портативності та простоти, чому б не дотримуватися стандарту?

З іншого боку, я погоджуюся, що короткі теги в шаблонах (і ТІЛЬКИ в шаблонах) здаються корисними, але проблема полягає в тому, що ми просто витратили стільки часу на його обговорення, що, швидше за все, знадобиться дуже багато часу, щоб насправді витратити стільки часу набираючи додаткові три символи "php" !!

Хоча мати багато варіантів приємно, це зовсім не логічно, і це може спричинити проблеми. Уявіть, якби кожна мова програмування дозволяла 4 або більше типів тегів: Javascript може бути <JS або <script .... або <% або <? JS .... це було б корисно? У випадку з PHP порядок розбору, як правило, на користь дозволення цих речей, але мова в багатьох інших способах не є гнучким: він кидає повідомлення або помилки при найменшій непослідовності, але короткі теги часто використовуються. А коли короткі теги використовуються на сервері, який не підтримує їх, може з’явитися дуже багато часу, щоб з’ясувати, що не так, оскільки в деяких випадках помилка не дається.

Нарешті, я не думаю, що тут є проблемою короткі теги: є лише два логічні типи блоків коду PHP - 1) звичайний код PHP, 2) відлуння шаблону. Щодо перших, я твердо вірю, що лише <? Php і?> Слід дозволити лише для того, щоб все було послідовно і портативно. Для останнього метод <? = $ Var?> Некрасивий. Чому так має бути? Чому б не додати щось набагато логічніше? <? php $ var?> Це нічого б не зробило (і лише за найвіддаленіших можливостей це могло б конфліктувати з чимось), і це може легко замінити незручний <? = синтаксис. Або якщо це проблема, можливо, вони можуть використовувати натомість <? Php = $ var?> І не турбуватися про невідповідності.

У точці, де є 4 варіанти відкриття та закриття тегів та випадкове додавання спеціального тегу «ехо», PHP може також мати прапор «спеціальні відкриті / закриті теги» у php.ini або .htaccess. Таким чином дизайнери можуть вибрати той, який їм найбільше подобається. Але з очевидних причин це надмірно. То чому дозволити 4+ варіанти?


4

Корисно їх використовувати, коли ви працюєте з MVC-рамкою або CMS, які мають окремі файли перегляду.
Це швидкий, менший код, не бентежить дизайнерів. Просто переконайтеся, що налаштування вашого сервера дозволяє використовувати їх.


4

Є дещо інша ситуація, коли розробляється додаток CodeIgniter . CodeIgniter, здається, використовує ярлики, коли PHP використовується в шаблоні / перегляді, інакше для моделей та контролерів він завжди використовує довгі теги. Це не важке і швидке правило в рамках, але здебільшого за цією конвенцією слідує рамка і багато джерел з інших цілей.

Мої два центи? Якщо ви ніколи не плануєте запускати код деінде, то використовуйте їх, якщо хочете. Я вважаю за краще не робити масового пошуку та заміни, коли зрозумію, що це дурна ідея.



3

Люди IMHO, які використовують короткі теги, часто забувають уникати того, що їм лунає. Було б непогано мати механізм шаблонів, який за замовчуванням виходить. Я вважаю, Роб А написав швидкий злом, щоб уникнути коротких тегів у додатках Zend Frameworks. Якщо вам подобаються короткі теги, тому що це робить PHP простішим для читання. Тоді, можливо, Smarty буде кращим варіантом?

{$myString|escape}

мені здається, що краще

<?= htmlspecialchars($myString) ?> 

10
Для більшості програмістів PHP другий варіант має більше сенсу, ніж перший, просто тому, що це фактична функція PHP, з якою ми знайомі, в той час як перший варіант - це псевдо шаблоновий код, який ми маємо вивчити поверх PHP. PHP - це вже шаблонна мова, додавання ще однієї мови шаблонів, як Smarty, є зайвою IMO.
Bug Magnet

3
Twig - це механізм роботи з шаблоном, увімкнення html- файлу
mateusza

3

Треба запитати, в чому сенс використання коротких тегів.

Швидше набрати

MDCore сказав:

<?= набагато зручніше, ніж набирати текст <?php echo

Так. Ви можете заощадити 7 символів * X разів у своїх сценаріях.

Однак, коли для розробки, розробки та написання сценарію потрібна година, або 10 годин, або більше, наскільки актуальними є кілька секунд часу, щоб не вводити ці 7 символів тут і там протягом тривалості сценарію?

У порівнянні з потенціалом для ядра або всіх сценаріїв, які не працюють, якщо короткі теги не увімкнено, або вони увімкнено, але оновлення чи зміна файлу / конфігурації сервера ini зупиняє їх роботу, інші потенціали.

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

Легше читати

Це залежить від знайомства .
Я завжди бачив і використовував <?php echo. Тож поки <?=читати не важко, мені це не знайоме і, отже, не простіше читати .

І при розділенні розробника на передній / задній кінець (як у більшості компаній), чи буде розробник переднього кінця, який працює над цими шаблонами, більш знайомий, знаючи, що <?=це "PHP відкритий тег та відлуння"?
Я б сказав, що більшості було б зручніше з більш логічним. Тобто, чіткий тег відкритого PHP і тоді, що відбувається "відлуння" - <?php echo.


Проблема оцінки ризику = весь сайт або основні сценарії не працюють;

Потенціал питання дуже низький + серйозність результату дуже висока = високий ризик

Висновок

Ви економите кілька секунд тут і там не потрібно вводити кілька символів, але ризикуєте багато для цього, а також, швидше за все, втратите читабельність.

Передні і задній кінець кодери , знайомі з <?=більшою ймовірністю зрозуміти <?php echo, як вони стандартні PHP річ - стандартний <?phpвідкриває тег і дуже добре відомі «відлуння».
(Навіть кодери на передньому кінці повинні знати "відлуння", або вони просто не будуть працювати над будь-яким кодом, який обслуговується рамкою).

Тоді як зворотний процес не є таким імовірним, хтось не може логічно зробити висновок, що знак рівності на короткому тезі PHP є "відлунням".


Це не має нічого спільного з набором тексту. Він коротший і, таким чином, має потенціал, щоб його було легше читати . Людина, яка звикла читати <?=, читатиме <?=легше, ніж людина, яка звикла читати <?php echoчитання <?php echo.
Pacerier

@Pacerier Коротше не просто = простіше читати. Всі ми різні. Що ви маєте в виду, що легше читати вас . Як я говорив у своїй відповіді, я звик <?phpбачити, що в коді багато разів мені більше знайоме, ніж <?=- знайомство полегшує справи, а не обов’язково краще.
Джеймс

Ні, я не порівнюю вас і мене, я кажу, що людина, яка звикла читати, <?=буде читати <?=краще, ніж людина, яка звикла читати <?php echoчитати <?php echo. Це означає, що якщо у нас є дві однакові копії особи X і змінюємо їх лише в аспекті, коли одна звикла читати <?=, а друга, яка використовується для читання <?php echo, перша копія може досягти значення читабельності під xчас читання, використовуючи потрібний синтаксис, тоді як другий примірник може досягти значення читабельності yпри читанні потрібного синтаксису, де x >= y.
Pacerier

Ні, ви не пропускаєте суть. Я маю на увазі потенціал системи, який не має нічого спільного з якоюсь конкретною людиною. Можна сказати, що люди, які звикли набирати клавіатуру qwerty, будуть швидше вводити файли qwerty, тоді як люди, які звикли вводити дворак, швидше набиратимуть файл з двораковим, але факт не змінюється, що обидві системи мають різний потенціал.
Pacerier

3

Давайте дивитися правді в очі. PHP некрасивий, як пекло, без коротких тегів.

Ви можете ввімкнути їх у .htaccessфайлі, якщо ви не можете дістатися до php.ini:

php_flag short_open_tag on

3
Помилковий. Іноді сервер налаштований заперечувати будь-які переосмислення, сер.
Альфабраво

17
Правда, але якщо ваш хост не дозволяє перекрити htaccess, вам дійсно потрібен новий хост! :)
Брайан Лейсі

1
не працює в інтерфейсі командного рядка, і php_flag не підтримується весь час
Elvis Ciotti

3

Щоб уникнути проблем з портативністю, запускайте теги PHP за допомогою, <?phpі якщо ваш PHP-файл є чисто PHP, без HTML, вам не потрібно використовувати теги, що закриваються.


2
  • Короткі теги прийнятно використовувати в тих випадках, коли ви впевнені, що сервер його підтримає і ваші розробники зрозуміють це.
  • Багато серверів не підтримують його, і багато розробників зрозуміють це, побачивши його один раз.
  • Я використовую повні теги для забезпечення портативності, оскільки це насправді не так вже й погано.

З урахуванням цього, мій друг сказав це, підтримуючи альтернативні стандартизовані теги стилю asp, як, <%а не <?, що є настройкою в php.ini, що називається asp_tags. Ось його міркування:

... довільні конвенції мають бути стандартизовані . Тобто, кожного разу, коли ми стикаємося з набором можливостей, які мають однакову цінність - наприклад, яку дивну пунктуацію має використовувати наша мова програмування для розмежування - ми повинні вибрати один стандартний спосіб і дотримуватися його. Таким чином ми зменшуємо криву навчання всіх мов (або будь-яких речей, що стосуються конвенції).

Мені це звучить добре, але я не думаю, що хтось із нас може об'їхати вагони навколо цієї справи. Тим часом я б дотримувався повного <?php.


2

Я вважав, що варто згадати це про PHP 7:

  • Короткі теги ASP PHP <% … %>пішли
  • Короткі вкладки PHP <? … ?>все ще доступні, якщо short_open_tagвстановлено значення true. Це за замовчуванням.
  • Починаючи з PHP 5.4, Короткі друку теги <?=… ?>будуть завжди включені, незалежно від short_open_tagнастройки.

Хороша відмова від першої, оскільки вона заважала іншим мовам.

Зараз немає причин не використовувати теги для короткого друку, окрім особистих уподобань.

Звичайно, якщо ви пишете код, сумісний із застарілими версіями PHP 5, вам потрібно буде дотримуватися старих правил, але пам’ятайте, що все, що раніше, ніж PHP 5.6, не підтримується.

Дивіться: https://secure.php.net/manual/en/language.basic-syntax.phptags.php


1
Якщо я не помиляюся, ваш перший пункт невірний. Док каже, що ASP-теги, а не короткі теги PHP, зникли як PHP 7.0.0.
реформовано

@reformed Ви абсолютно праві. Я відредагую свою відповідь. Спасибі
Мангго

1

Якщо ви дбаєте про XSS, то вам слід використовувати <?= htmlspecialchars(…) ?>більшу частину часу, тому короткий тег не має великого значення.

Навіть якщо ви скоротите echo htmlspecialchars()до h()цього, все ж проблема, що ви повинні пам’ятати, що додавати їх майже кожен раз (і намагаючись відстежувати, які дані попередньо видаляються, які є недиспективними, але нешкідливими, лише роблять помилки більш ймовірними).

Я використовую двигун шаблонів, який захищений за замовчуванням і пише <?phpтеги для мене.


7
Якщо ви виявите, що ви набираєте "<? Php echo htmlspecialchars ($ text, ENT_QUOTES, 'UTF-8');?> 500 разів на день, можливо, ви захочете створити функцію швидкого доступу з назвою" h ", як Rails має .." < ? = h ($ текст)?> "просто набагато читабельніший при скануванні шаблону.
Олександр Мальфайт

1
І справді, але краще, але з двигуном шаблону він може бути просто $ {text} або таким (і вам не потрібно пам'ятати, щоб додати h ())
Корнель,

7
Сам PHP - це шаблонна система. Коли ви припиняєте використовувати короткі теги, він починає погано розробляти шаблони, оскільки стає занадто багатослівним.
Йозеф Сабл

1
@Alexander Malfait - це гарна порада. Але <? = Не потрібен. Ви можете просто змусити функцію відлунювати рядок замість повернення, тож ви писали б <? Php h ('привіт')?> Хіба ми це вже не робимо, коли ми де i18n? <? php _e ('')?> не так вже й погано.
ВладФр

1

<?php ?>набагато краще використовувати, оскільки розробники цієї мови програмування масово оновлювали свою основну мову. Ви можете побачити різницю між короткими та довгими тегами.

Короткі теги будуть виділятися світло-червоними, а довші - темніше!

Однак, щось лунає, наприклад: <?=$variable;?>прекрасно. Але віддайте перевагу довшим тегам.<?php echo $variable;?>


1

Перетворити <?(без пробілу) в <?php(з пробілом):

find . -name "*.php" -print0 | xargs -0 perl -pi -e 's/<\?(?!php|=|xml|mso| )/<\?php /g'

Перетворіть <?(із заднім простором) в <?php(збереження проміжного простору):

find . -name "*.php" -print0 | xargs -0 perl -pi -e 's/<\? /<\?php /g'

1

Короткий тег завжди доступний у php. Тож вам не потрібно повторювати перше твердження у вашому сценарії

приклад:

    $a =10;
    <?= $a;//10 
    echo "Hellow";//
    echo "Hellow";

   ?>

Раптом вам потрібно використовувати для одного скрипта php, тоді ви можете використовувати його. приклад:

<html>
<head>
<title></title>
</head>  
<body>
<p>hellow everybody<?= hi;?></p>
<p>hellow everybody  </p> 
<p>hellow everybody  </p>   
</body>
</html>

1

Станом на 2019 рік я не погоджуюся з певними відповідями тут. Я рекомендую використовувати довгі теги

<?php /* code goes here */ ?>

або короткі ехо-теги

<?= /* code goes here */ ?>

Причина: їх рекомендує базовий стандарт кодування PSR-1

Інші короткі теги, як-от <? /* code goes here */ ?>не рекомендуються.

Специфікація говорить:

PHP-код ОБОВ'ЯЗКОВО використовувати довгі теги або теги короткого відлуння; НЕ МОЖЕТЕ використовувати інші варіанти тегів .


1

3 теги доступні в php:

  1. тег довгої форми, на який <?php ?>не потрібно наводити жодного налаштованого
  2. short_open_tag, який <? ?> доступний, якщо параметр short_open_tag у php.ini увімкнено
  3. скоротити тег, <?= оскільки php 5.4.0 він завжди доступний

з php 7.0.0 asp та тег сценарію видалено


Це не відповідає на запитання.
RalfFriedl

-5

Ні, і вони закриваються через PHP 6, тому якщо ви цінуєте довговічність коду, просто не використовуйте їх або <% ... %>теги.


4
Я бачив інші публікації в блозі, які говорять про те, що вони не збираються застарітими, лише короткі теги стилю ASP.
MDCore

22
Схоже, ця відповідь невірна, за цим посиланням з наради розробників PHP: php.net/~derick/…
Чарльз

7
ЧОМУ вони такі погані, чому? Всі настільки впевнені в собі, що вони бааааад, але ніхто не каже чому.
Йозеф Сабл

6
ПОМИЛКОВИЙ. Вони поступово відміняють теги <%%>, як справді слід. Вони не мають жодної мети, крім плутанини. The <? ?> теги не впливатимуть; але, звичайно, вони все ще налаштовуються на сервері, і ви завжди повинні бути в курсі вимог цільової платформи.
Брайан Лейсі

6
Ця інформація видається невірною та оманливою, і її має виправити автор.
текс
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.