2010-07-20 7 views
7

ho definito una variabile in un file di configurazione separato:errore di analisi quando concat'ing una variabile definita e stringa in una classe

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

Tuttavia, quando cerco di usarlo per concat con una stringa all'interno di un classe:

class AdminEmail extends Email { 

    private $from = "jsmith".URL; 

ottengo il seguente errore:

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

Ma se mi associo fuori, visualizza perfettamente!

Spero di non aver perso nulla di ovvio qui!

risposta

17

Non è possibile utilizzare costanti, funzioni o altre variabili quando si definiscono le variabili di classe. Le definizioni di classe sono come i progetti, devono essere completamente indipendenti da qualsiasi altra cosa avvenga nello script (ad eccezione delle dipendenze di altre classi, ovviamente).

Dovresti impostarlo in seguito, ad es. nel costruttore:

class AdminEmail extends Email { 

    private $from; 

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

o in una funzione separata:

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

Grazie mille, ho appena cominciato a imparare OOP in modo Scommetto che questa è roba piuttosto di base. Di nuovo! – davidandrew

+0

Non preoccuparti, davey. Cercando di concat una stringa da usare come proprietà di classe mi ha catturato quando stavo iniziando anch'io! –

1

È possibile utilizzare le costanti, ma non funzioni o altre variabili quando pre-definizione delle variabili di classe. Inoltre, non è possibile utilizzare operatori come l'operatore di concatenazione di stringhe di punti ..

Vedere il PHP OO Manual per i dettagli. Si noti che è possibile utilizzare il costrutto array() durante la definizione preliminare delle variabili di classe. array() non è una funzione ma un costrutto di linguaggio.

In questo caso ci sono in effetti due percorsi da scegliere come soluzione. È possibile definire il valore nel costruttore:

class AdminEmail extends Email { 

    private $from; 

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

L'altra soluzione è quella di sempre recuperare il valore utilizzando una funzione:

class AdminEmail extends Email { 

    private $from; 

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