Подтвердить что ты не робот

Что означает ${} в синтаксисе PHP?

Я использовал PHP в течение длительного времени, но я только что увидел что-то вроде

${  } 

Чтобы быть точным, я увидел это на странице PHP Mongo:

$m = new Mongo("mongodb://${username}:${password}@host");

Итак, что делает ${ }? В Google или документации PHP довольно сложно искать такие символы, как $, { и }.

4b9b3361

Ответ 1

${ } (фигурная скобка со знаком доллара) называется сложным (фигурным) синтаксисом:

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

Любая скалярная переменная, элемент массива или свойство объекта со строковым представлением могут быть включены через этот синтаксис. Просто напишите выражение так же, как оно выглядит за пределами строки, а затем оберните его в { и }. Поскольку { не может быть экранирован, этот синтаксис будет распознаваться только тогда, когда $ следует сразу за {. Используйте {\$ чтобы получить литерал {$. Несколько примеров, чтобы прояснить это:

<?php
// Show all errors
error_reporting(E_ALL);

$great = 'fantastic';

// Won't work, outputs: This is { fantastic}
echo "This is { $great}";

// Works, outputs: This is fantastic
echo "This is {$great}";
echo "This is ${great}";

// Works
echo "This square is {$square->width}00 centimeters broad."; 


// Works, quoted keys only work using the curly brace syntax
echo "This works: {$arr['key']}";


// Works
echo "This works: {$arr[4][3]}";

// This is wrong for the same reason as $foo[bar] is wrong  outside a
// string. In other words, it will still work, but only because PHP 
// first looks for a constant named foo; an error of level E_NOTICE 
// (undefined constant) will be thrown.
echo "This is wrong: {$arr[foo][3]}"; 

// Works. When using multi-dimensional arrays, always use braces around
// arrays when inside of strings
echo "This works: {$arr['foo'][3]}";

// Works.
echo "This works: " . $arr['foo'][3];

echo "This works too: {$obj->values[3]->name}";

echo "This is the value of the var named $name: {${$name}}";

echo "This is the value of the var named by the return value of "
      . " getName(): {${getName()}}";

echo "This is the value of the var named by the return value of "
        . "\$object->getName(): {${$object->getName()}}";

// Won't work, outputs: This is the return value of getName(): {getName()}
echo "This is the return value of getName(): {getName()}";
?>

Ответ 2

Это встроенная переменная, поэтому она знает, где прекратить поиск конца идентификатора переменной.

${username} в строке означает $username вне строки. Таким образом, он не считает, что $u является идентификатором переменной.

Это полезно в таких случаях, как URL-адрес, который вы указали, потому что тогда после идентификатора не требуется пробел.

Смотрите раздел php.net об этом.