2011-04-06 18 views
19

He utilizado PHP durante mucho tiempo, pero acabo de ver algo como,

${ } 

Para ser precisos, vi esto en una página PHP Mongo:

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

Por lo tanto, lo que hace ${ } ¿hacer? Es bastante difícil buscar con Google o en la documentación de PHP para caracteres como $, { y }.

+0

Su uso es una especie de sentido aquí, sin embargo, ' "mongodb: // $ nombre de usuario: contraseña @ $ $ host"' funcionaría igual de bien. –

Respuesta

27

${ } (corchete signo del dólar) se conoce como Complex (curly) syntax:

Esto no se llama complejo porque la sintaxis es compleja, pero debido a que permite el uso de expresiones complejas.

Cualquier variable escalar, elemento de matriz u objeto con una representación string se puede incluir a través de esta sintaxis. Simplemente escriba la expresión de la misma manera que aparecería fuera del string, y luego envuélvala en { y }. Como no se puede escapar del {, esta sintaxis solo se reconocerá cuando el $ siga inmediatamente el {. Use {\$ para obtener un literal {$. Algunos ejemplos para que quede claro:

<?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()}"; 
?> 
7

Es una variable incrustada, por lo que sabe dónde dejar de buscar el final del identificador de la variable.

${username} en una cadena significa $username fuera de una cadena. De esta forma, no cree que $u sea el identificador de la variable.

Es útil en casos como la URL que proporcionó, ya que no necesita espacio después del identificador.

Consulte el php.net section al respecto.

+9

por ejemplo: '$ a = 'blah'; echo "$ abc"; 'no sonará nada, ya que $ abc no está establecido mientras' $ a = 'blah'; echo "$ {a} bc"; 'echo" blahbc " –

+2

" La sintaxis compleja (rizada) "se documenta aquí: http://www.php.net/manual/en/language.types.string.php#language .types.string.parsing.complex - por cierto, los ejemplos parecen preferir '{$ username}' sobre '$ {username}' aunque ambos funcionan en el caso simple. –

+0

+1 Bob, buen ejemplo – Cyclone

Cuestiones relacionadas