2012-01-06 12 views
9

¿Alguien me puede decir por qué esto no funciona? Es solo un ejemplo crudo de lo que intento hacer en otro lado.Concatenación __DIR__ constante con una cadena como un valor de matriz que es un miembro de la clase en PHP

$stuff = array(
    'key' => __DIR__ . 'value' 
); 

Sin embargo, esto produce un error:

PHP Parse error: syntax error, unexpected '.', expecting ')' in /var/www/.../testing.php on line 6 

Además, esto funciona:

$stuff = array(
    'key' => "{__DIR__} value" 
); 
+1

Gracias por la rápida respuesta ManseUK. Con el interés de entender mi problema un poco más, ¿qué devuelve? Var_dump'ed it: string (26) "/var/www/../trunk" – acairns

+1

establezca el valor $ stuff en su constructor – Gerep

Respuesta

7

La primera pieza de código no funciona porque no es una expresión constante, a medida que están tratando de concatenar dos cadenas. Los miembros iniciales de la clase deben ser constantes.

Desde el documentation:

[property] initialization must be a constant value--that is, it must be able to be evaluated at compile time and must not depend on run-time information in order to be evaluated.

+0

Entonces, debido a que __ DIR __ es la ubicación del archivo actual, su información de tiempo de ejecución no está disponible en tiempo de compilación Gracias Tim. – acairns

+1

@acairns: No exactamente. PHP tiene el valor de '__DIR__' cuando se está compilando el script, como se puede ver al inicializar el string como:' "{__DIR__} value" '. Cómo estás accediendo a la constante mágica es la única diferencia aquí, donde uno se ve como una expresión constante y el otro no. –

3

No se puede utilizar el operador en una inicialización de la propiedad. La solución consiste en utilizar el constructor:

public function __construct() 
{ 
    $this->stuff = array(
     'key' => __DIR__ . 'value' 
); 
} 

Desde el doc PHP:

This declaration may include an initialization, but this initialization must be a constant value--that is, it must be able to be evaluated at compile time and must not depend on run-time information in order to be evaluated.

http://www.php.net/manual/en/language.oop5.properties.php

0

Set $ ​​valor de las cosas en su constructor

function __construct() 
{ 
$this->$stuff = array(
     'key' => __DIR__ . 'value' 
    ); 
} 
Cuestiones relacionadas