2010-07-20 2 views
7

j'ai défini une variable dans un fichier de configuration séparé:Parse error lorsque concat'ing une variable définie et chaîne dans une classe

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

Cependant, lorsque je tente de l'utiliser pour concaténer avec une chaîne dans un classe:

class AdminEmail extends Email { 

    private $from = "jsmith".URL; 

Je reçois l'erreur suivante:

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

Mais si je fais l'écho dehors, il affiche parfaitement!

J'espère que je n'ai manqué rien d'évident ici!

Répondre

17

Vous ne pouvez pas utiliser de constantes, de fonctions ou d'autres variables lors de la prédéfinition de variables de classe. Les définitions de classes sont comme des plans, elles doivent être complètement indépendantes de tout ce qui se passe dans le script (à l'exception des dépendances sur d'autres classes bien sûr.)

Vous devrez régler ceci plus tard, par ex. dans le constructeur:

class AdminEmail extends Email { 

    private $from; 

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

ou dans une fonction distincte:

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

Merci beaucoup, je viens juste de commencer à apprendre la POO si Je parie que c'est un truc assez basique. Bravo encore! – davidandrew

+0

Ne vous inquiétez pas, davey. Essayer de concaténer. une chaîne à utiliser comme propriété de classe m'a attrapé quand je commençais aussi! –

1

Vous pouvez utiliser des constantes, mais pas des fonctions ou d'autres variables lors de variables de classe pré-définition. De même, vous ne pouvez pas utiliser d'opérateur comme l'opérateur de concaténation de chaîne de points .. Pour plus de détails, voir le PHP OO Manual. Prenez note que vous pouvez utiliser la construction array() lors de la pré-définition des variables de classe. array() n'est pas une fonction mais une construction de langage.

Dans ce cas, vous avez en effet deux chemins à choisir en tant que solution. Vous pouvez définir la valeur dans le constructeur:

class AdminEmail extends Email { 

    private $from; 

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

L'autre solution est de toujours récupérer la valeur en utilisant une fonction:

class AdminEmail extends Email { 

    private $from; 

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