trabajar - validar cadenas en php
¿Interpolar constante(no variable) en heredoc? (5)
<?php
define(''my_const'', 100);
echo <<<MYECHO
<p>The value of my_const is {my_const}.</p>
MYECHO;
?>
Si pongo una variable dentro de los tirantes se imprime. Pero no la constante. ¿Cómo puedo hacerlo? ¡Gracias!
Aquí hay un pequeño truco para permitir que las cadenas de comillas dobles y los heredoc contengan expresiones arbitrarias en la sintaxis de llaves, incluidas las constantes y otras llamadas a funciones. Utiliza el hecho de que un nombre de función puede asignarse a una variable y luego llamarse dentro de heredoc:
<?php
// Declare a simple function
function _placeholder($val) { return $val; }
// and assign it to something short and sweet
$_ = ''_placeholder'';
// or optionally for php version >= 5.3
// Use a closure (anomynous function) like so:
$_ = function ($val){return $val;};
// Our test values
define(''abc'', ''def'');
define(''ghi'', 3);
$a=1;
$b=2;
function add($a, $b) { return $a+$b; }
// Usage
echo "b4 {$_(1+2)} after/n"; // outputs ''b4 3 after''
echo "b4 {$_(abc)} after/n"; // outputs ''b4 def after''
echo "b4 {$_(add($a, $b)+ghi*2)} after/n"; // outputs ''b4 9 after''
$text = <<<MYEND
Now the same in heredoc:
b4 {$_(1+2)} after
b4 {$_(abc)} after
b4 {$_(add($a, $b)+ghi*2)} after
MYEND;
echo $text;
Coloque su variable definida en una variable simple y use incluirla en heredoc como en el siguiente ejemplo:
<?php
define(''my_const'', 100);
$variable = my_const;
echo <<<MYECHO
<p>The value of my_const is {$variable}.</p>
MYECHO;
?>
Soy consciente de que esto ya ha sido respondido, pero también puede abordar el problema asignando el valor de la constante a una variable.
Personalmente, lo hago de esa manera porque si tienes muchas constantes en tu cadena, entonces tu llamada a sprintf puede ser bastante complicada. También es más difícil escanear a través de la cadena y ver qué está haciendo qué. Además, al asignar las variables de forma individual, puede ver qué está tomando qué valor.
Un ejemplo sería:
$const = CONST;
$variable = VARIABLE;
$foo = (new Foo)->setFooProperty(12)->getFooProperty();
$bar = (123 - 456) * 10;
$ten = 1 + 2 + 1 + (5 - 4);
<<<EOD
Lorem ipsum dolor sit amet, **$variable** adipiscing elit.
Duis gravida aliquet dolor quis gravida.
Nullam viverra urna a velit laoreet, et ultrices purus condimentum.
Ut risus tortor, facilisis sed porta eget, semper a augue.
Sed adipiscing erat non sapien commodo volutpat.
Vestibulum nec lectus sed elit dictum accumsan vel adipiscing libero.
**$const** vehicula molestie sapien.
Ut fermentum quis risus ut pellentesque.
Proin in dignissim erat, eget molestie lorem. Mauris pretium aliquam eleifend.
**$foo** vitae sagittis dolor, quis sollicitudin leo.
Etiam congue odio sit amet sodales aliquet.
Etiam elementum auctor tellus, quis pharetra leo congue at. Maecenas sit amet ultricies neque.
Nulla luctus enim libero, eget elementum tellus suscipit eu.
Suspendisse tincidunt arcu at arcu molestie, a consequat velit elementum.
Ut et libero purus. Sed et magna vel elit luctus rhoncus.
Praesent dapibus consectetur tortor, vel **$bar** mauris ultrices id.
Mauris pulvinar nulla vitae ligula iaculis ornare.
Praesent posuere scelerisque ligula, id tincidunt metus sodales congue.
Curabitur lectus urna, porta sed molestie ut, mollis vitae libero.
Vivamus vulputate congue **$ten**.
EOD;
También puede utilizar la función get_defined_constants . Devuelve todas las constantes definidas actualmente en una matriz, que puede usar en su cadena HEREDOC
// Let''s say there is FOO and BAR defined
$const = get_defined_constants();
$meta = <<< EOF
my awesome string with "{$const[''FOO'']}" and "{$const[''BAR'']}" constants
EOF;
Utilizar sprintf()
define(''my_const'', 100);
$string = <<< heredoc
<p>The value of my_const is %s.</p>
heredoc;
$string = sprintf($string, my_const);