2011-06-09 12 views
7

he creado una clase, que simplificó es la siguiente:Uso de variables estáticas de clase - en un heredoc

class Labels { 
    static public $NAMELABEL = "Name"; 
} 

éxito que tiene el siguiente código que funciona bien:

echo '<table border="1">'; 
    echo '<tr>'; 
    echo "<th>" . Labels::$NAMELABEL . "</th>"; 
    echo '</tr>'; 

// the rest of the Table code not shown for brevity... 

echo "</table>"; 

Veo una tabla con un encabezado de columna llamado Nombre cuando ejecuto esto - por lo que funciona bien.

Pero no dentro de una heredoc - consigo "Notice: Undefined variable: NAMELABEL en C: \ xampp ........ bla bla" cuando corro el siguiente:

echo <<<_END 
     <form action="index.php" method="post"><pre> 
     Labels::$NAMELABEL : <input type="text" name="author" /> 
     <input type="submit" value="ADD RECORD" /> 
    </pre></form> 
_END; 

He intentado todo tipo de citas, string concat operator '.', Nada funciona. Me imaginé "Bueno, tengo las variables de clase estáticas para trabajar en una tabla HTML, por qué no a heredoc."

Dang Me encantan los dodoles, vienen con un nombre raro y problemas extraños. Es el tipo de diversión alucinante que anhelo, aquí los doctores son monos doosh justos.

Realmente quiero usar mis variables de clase estáticas aquí - ¿hay alguna combinación de comillas/cadena de concatenación que me permita incrustarlas en mis heredocs?

+0

¿Qué versión de PHP está ejecutando, 5.3 o una versión anterior? –

+0

Este es un error de larga duración en el analizador Heredoc (problema de alcance). Me encontré con esto hoy mientras buscaba información sobre una variable estática relacionada con el error de análisis de heredoc. – h0tw1r3

Respuesta

7

La interpolación en heredocs funciona igual que entre comillas dobles, por lo que puede usar curly brace ("complex") syntax.

Sin embargo, el analizador no reconoce las variables de clase estáticas (ver la documentación anterior). Para hacer referencia a variables de clases estáticas, deberá configurarlas localmente de la siguiente manera:

$label = Labels::$NAMELABEL; 

echo <<<_END 
    <form action="index.php" method="post"><pre> 
     $label : <input type="text" name="author" /> 
     <input type="submit" value="ADD RECORD" /> 
    </pre></form> 
_END; 
+0

@Jordan, ¿por qué es necesario $ ?, ¿funcionará sin él? Algunos de los ejemplos en el documento al que hizo referencia hacen cosas como '{$ foo -> $ bar}', y '{$ {cervezas :: bebida sin formato}}'. ¿También funcionaría '{Labels :: $ NAMELABEL}', sin $? –

+0

Gracias, eso me acercó: para borrar una advertencia de "mala sintaxis" en mi editor de Netbeans, tenía que tener un espacio como este: $ {Labels :: $ NAMELABEL} - que borraba el error de sintaxis en el navegador. Ahora se evalúa como Nombre, pero el navegador lo marca diciéndole Aviso: Variable indefinida: Nombre en C: \ xampp ......... blah blah. – wantTheBest

+0

Creo que debe haber un '$' ya sea directamente anterior o inmediatamente después de la apertura '{'. Como 'Labels' es un nombre de clase en tu código (no' $ ') debes usar' $ {'para que el intérprete sepa qué hacer. –

Cuestiones relacionadas