2010-07-20 10 views
7

mam zdefiniowaną zmienną w oddzielnym pliku config:błąd Parse gdy concat'ing zdefiniowaną zmienną i ciąg w klasie

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

Jednak, gdy próbuję użyć go do Concat sznurkiem wewnątrz klasa:

class AdminEmail extends Email { 

    private $from = "jsmith".URL; 

pojawia się następujący błąd:

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

Ale jeśli echo ją, wyświetla idealnie!

Mam nadzieję, że nie przegapiłem niczego oczywistego tutaj!

Odpowiedz

17

Nie można używać stałych, funkcji ani innych zmiennych podczas wstępnego definiowania zmiennych klas. Definicje klas są jak projekty, muszą być całkowicie niezależne od wszystkiego, co dzieje się w skrypcie (z wyjątkiem zależności oczywiście od innych klas).

Musisz ustawić to później, np. w konstruktorze:

class AdminEmail extends Email { 

    private $from; 

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

lub w osobnej funkcji:

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

Dzięki wielkie, właśnie rozpoczął naukę tak OOP Założę się, że to dość podstawowe rzeczy. Znów na zdrowie! – davidandrew

+0

Nie martw się, Davey. Próbujesz konkatować. ciąg znaków do wykorzystania jako własność klasy przykuł mnie, gdy ja też zaczynałem! –

1

Można używać stałych, ale bez funkcji lub innych zmiennych podczas wstępnego zdefiniowania zmiennych klasy. Ponadto nie można używać operatorów takich jak operator konkatenacji kropek.

Szczegółowe informacje znajdują się w PHP OO Manual. Zwróć uwagę, że możesz użyć konstrukcji array() podczas wstępnego definiowania zmiennych klas. array() nie jest funkcją, ale konstrukcją językową.

W tym przypadku masz rzeczywiście dwie ścieżki do wyboru jako rozwiązanie. Można określić wartość w konstruktorze:

class AdminEmail extends Email { 

    private $from; 

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

Innym rozwiązaniem jest zawsze odzyskać wartość przy użyciu funkcji:

class AdminEmail extends Email { 

    private $from; 

    function getFrom() 
    { 
    if (null === $this->from) { 
     $this->from = "jsmith" . URL; 
    } 
    return $this->from; 
    } 
Powiązane problemy