Я Php n00b. Я читаю онлайн-учебник, но у меня уже вопрос (очень простой вопрос, я полагаю):
Я не понимаю, почему следующий код работает правильно:
<html>
<head>
<title> My Firts PHP page </title>
</head>
<body>
<?php
$userAgent = $_SERVER["HTTP_USER_AGENT"];
echo "<p>This is my awesome User Agent: <b>\"$userAgent\"</b></p>";
?>
</body>
</html>
и вместо этого следующее не работает, хотя я защищаю кавычки внутри скобок:
<html>
<head>
<title> My Firts PHP page </title>
</head>
<body>
<?php
echo "<p>This is my awesome User Agent: <b>$_SERVER[\"HTTP_USER_AGENT\"]</b></p>";
?>
</body>
</html>
Заранее спасибо.
Вы в основном нашли краевой случай интерполяции строк. В то время как алфавитно-цифровые ключи массива должны быть указаны в PHP, в строках с двойными кавычками они должны быть не кавычками:
echo "<p>This is my awesome User Agent: <b>$_SERVER[HTTP_USER_AGENT]</b></p>";
Строковый синтаксический анализ следует своим собственным правилам. В общем, вы не можете отказаться от случайного PHP-кода внутри строки и выполнить ее.
Вы можете попробовать один из них:
Кудрявая скобка позволяет создавать сложные выражения внутри строк
<html>
<head>
<title> My Firts PHP page </title>
</head>
<body>
<?php
echo "<p>This is my awesome User Agent: <b>{$_SERVER[\"HTTP_USER_AGENT\"]}</b></p>";
?>
</body>
</html>
еще лучше, просто используйте php для части, которую вы выводите.
<html>
<head>
<title> My Firts PHP page </title>
</head>
<body>
<p>This is my awesome User Agent: <b><?php echo $_SERVER["HTTP_USER_AGENT"]; ?></b></p>
</body>
</html>
Неправильное использование котировок escapinng. Смотрите и проверьте:
echo "<p>This is my awesome User Agent: <b>". $_SERVER["HTTP_USER_AGENT"] ."</b></p>";
Вы можете включить переменную в строку следующим образом:
echo "<p>This is my awesome User Agent: <b>{$_SERVER["HTTP_USER_AGENT"]}</b></p>";
Это лучше и чище, если вы использовали
echo "<p>This is my awesome User Agent: <b>". $_SERVER["HTTP_USER_AGENT"] ."</b></p>";
Или без одинарных кавычек в ключе массива
echo "<p>This is my awesome User Agent: <b>$_SERVER[HTTP_USER_AGENT]</b></p>";