unir - Variables de función estática y concatenación en PHP
php concatenar string numero (3)
Considera lo siguiente:
$var = ''foo'' . ''bar''; # Not a member of a class, free-standing or in a function.
Tan pronto como marque $var
como static
, sin embargo:
static $var = ''foo'' . ''bar'';
PHP (5.3.1 en una configuración WAMP) se queja con el siguiente error:
Error de análisis : error de sintaxis, ''.'' Inesperado, esperando '','' o '';''
Parece que la concatenación de cuerdas es el culpable aquí.
¿Que está pasando aqui? ¿Puede alguien explicarme las reglas para las variables estáticas?
El manual establece, en el ámbito de Variables :
Intentar asignar valores a estas variables [estáticas] que son el resultado de expresiones causará un error de análisis.
También se menciona en la palabra clave estática :
Como cualquier otra variable estática de PHP, las propiedades estáticas solo pueden inicializarse usando un literal o una constante; No se permiten expresiones.
Aunque se debe tener en cuenta que una propiedad, estática o no, no se puede inicializar usando una expresión.
Hago esto:
class MyClass {
static $var1;
static $var2;
public static function _init() {
self::$var1 = ''slkslk'' . ''sksks'' . ''arbitrary'' ;
self::var2 = <<<EOT
<root>
<elem1>skjsksj</elem1>
</root>
EOT;
}
}
MyClass::_init();
No se pueden hacer expresiones en inicializadores. Usted puede, sin embargo, hacer esto:
define(''FOOBAR'', ''foo''.''bar'');
static $var = FOOBAR;
echo $var;
El hecho poco conocido es que aunque los inicializadores no pueden contener expresiones de tiempo de ejecución, pueden contener constantes que se pueden definir y resolver en tiempo de ejecución. Sin embargo, la constante debe definirse por el momento en que $var
se usa por primera vez; de lo contrario, obtendrá una cadena idéntica a la constante (por ejemplo, "FOOBAR"
).