2010-07-20 17 views
7

he definido una variable en un archivo de configuración distinto:Error de análisis cuando concat'ing una variable definida y cadena en una clase

define('URL', 'someurl.co.uk'); 

Sin embargo, cuando trato de usarlo a concat con una cadena dentro de una clase:

class AdminEmail extends Email { 

    private $from = "jsmith".URL; 

me sale el siguiente error:

Parse error: parse error, expecting `','' or `';'' 

Pero si me echo hacia fuera, muestra perfectamente!

Espero que no me haya perdido nada obvio aquí!

Respuesta

17

No puede usar constantes, funciones u otras variables al predefinir las variables de clase. Las definiciones de clases son como planos, deben ser completamente independientes de cualquier otra cosa que ocurra en el script (excepto las dependencias de otras clases, por supuesto).

Debería configurar esto más tarde, p. en el constructor:

class AdminEmail extends Email { 

    private $from; 

    function __construct() 
    { 
    $this->from = "jsmith".URL; 
    } 

o en una función separada:

function setFrom($from) 
    { 
    $this->from = $from; 
    } 
+1

Muchas gracias, He empezado a aprender programación orientada a objetos tan Apuesto a que esto es bastante básico. ¡Salud de nuevo! – davidandrew

+0

No se preocupe, davey. Intentando concat. una cadena para usar como una propiedad de clase me sorprendió cuando estaba empezando también! –

1

Puede utilizar constantes, pero no las funciones u otras características variables cuando se pre-definir las variables de clase. Además, no puede usar operadores como el operador de concatenación de cadenas de puntos ..

Consulte el PHP OO Manual para los detalles. Tenga en cuenta que puede usar el constructo array() al predefinir las variables de clase. array() no es una función sino una construcción de lenguaje.

En este caso, tiene dos caminos para elegir como solución. Se puede definir el valor en el constructor:

class AdminEmail extends Email { 

    private $from; 

    function __construct() 
    { 
    $this->from = "jsmith".URL; 
    } 

La otra solución es siempre recuperar el valor con una función:

class AdminEmail extends Email { 

    private $from; 

    function getFrom() 
    { 
    if (null === $this->from) { 
     $this->from = "jsmith" . URL; 
    } 
    return $this->from; 
    } 
Cuestiones relacionadas