PHP изначально разрабатывался как простой язык шаблонов для HTML. Где у вас был статический HTML:
<p>Hello, World!</p>
& hellip; вы могли бы заменить его часть динамически сгенерированным значением:
<p>Hello, <?=$name?>!</p>
^^^^^^^^^^ ^^^^^ HTML
^^^^^^ PHP
Хотя в настоящее время это полноценный язык, он все еще поддерживает тот же основной синтаксис встроенного языка.
Интерпретатору PHP на самом деле все равно, является ли внешний язык HTML или чем-то еще, потому что он просто игнорирует все, что находится за пределами тегов PHP. Он читает исходный файл и печатает его как есть, но когда он находит открывающий тег PHP, он начинает анализировать и выполнять как код PHP все, что он находит внутри тега. Таким образом, можно использовать PHP в качестве движка шаблонов для всего: CSS, JavaScript, XML, простого текста, бинарных файлов ... Что угодно. PHP не должен знать или заботиться.
Текстовый редактор, такой как VisualStudio Code, сталкивается с другой ситуацией, поскольку окружающий язык имеет отношение к программисту, а значит, и к редактору. Если бы он заботился только о коде PHP, то все, что находится за пределами тегов PHP, не имело бы ни подсветки синтаксиса, ни интеллигентности кода - не круто.
На практике есть две проблемы с этим:
Поскольку, вероятно, в 99% случаев у нас есть PHP внутри HTML, большинство редакторов просто предполагают, что внешним языком в файле .php
является HTML, и называют его днем.
Теперь, почему моя запись для <?php ?>
в моем php.json
файле сниппета вообще не работает (но работает, когда в html.json
), когда это явно тег PHP (и явно не тег HTML)?
Потому что, когда вы запускаете фрагмент, вы находитесь в контексте HTML. Ваша карета здесь:
<p>Hello, |</p>
* +1036 * & hellip; поэтому VSCode выполняет поиск в HTML-фрагментах.
Если ваша карета была, например, здесь:
<p>Hello, <?=|?>!</p>
& hellip; он должен работать без сбоев, потому что вы находитесь в контексте PHP, поэтому VSCode ищет в фрагментах PHP (попробуйте!). Но это бессмысленная функция, потому что вы не хотите вставлять теги PHP, когда вы уже находитесь в режиме PHP - это генерирует недопустимый PHP, потому что вы не можете вкладывать теги PHP.