2016-07-31 10 views
1

Ich baue ein einfaches Multi-Sprachen-System. Ich habe eine Klasse namens Sprache erstellt, die von meinem Controller geladen wird, ist die Klasse sehr einfach:Kann keine Variable von einer anderen PHP-Datei erhalten

class Language 
{ 
    private $_langPath = null; 

    function __construct() 
    { 
     $this->_langPath = 'languages/' . LANGUAGES . '/trans_mig.php'; 

     if(!file_exists($this->_langPath)) 
     { 
      throw new exception("File not found: " . LANG); 
     } 
     else 
     { 
      include $this->_langPath; 
     } 
    } 

    public function line($key) 
    { 
     return $lang[$key]; 
    } 
} 

innerhalb der trans_mig.php habe ich folgendes:

$lang['home'] = 'Home'; 
$lang['user'] = 'User'; 

aber wenn ich zum Beispiel dies:

$this->lang->line('user'); 

ich erhalte die folgende Fehlermeldung:

Notice: Undefined variable: lang

in der Datei, die ich die trans_mig.php enthalten habe, was mache ich falsch?

+1

'$ lang' enthalten ist außerhalb der Klasse definiert. Es gibt keine '$ lang'-Eigenschaft in der 'Language'-Klasse, so dass Sie nicht mit' $ this' darauf zugreifen können. [Variablenbereich] (http://php.net/manual/en/language.variables.scope.php). – FirstOne

Antwort

2
public function line($key) 
{ 
    return $lang[$key]; 
} 

Sie definieren $lang nicht innerhalb der Funktion. Also, aufgrund variable scope, ist es nicht in Ihrer Funktion definiert.

Was Sie tun sollten, ist $lang in Ihrer Klasse zu definieren und die Variable ziehen aus Ihrem

class Language 
{ 
    private $_langPath = null; 
    /** @var array */ 
    protected $lang; 

    function __construct() 
    { 
     $this->_langPath = 'languages/' . LANGUAGES . '/trans_mig.php'; 

     if(!file_exists($this->_langPath)) 
     { 
      throw new exception("File not found: " . LANG); 
     } 
     else 
     { 
      include $this->_langPath; 
     } 
     $this->lang = $lang; 
    } 

    public function line($key) 
    { 
     return $this->lang[$key]; 
    } 
} 
+1

@FirstOne Pro $ OP ist '$ lang' im' trans_mig.php' enthalten, was im Konstruktor – Machavity

+0

ist Ja, jetzt funktioniert das großartig, ich habe mir nicht gedacht, dass diese Praxis funktionieren könnte. Danke :) –

+0

Eine weitere Option, in Ihrem Include, können Sie 'return $ lang;' am Ende hinzufügen, dann können Sie '$ this-> lang = include $ this -> _ langPath;' unter Vermeidung variabler Verschmutzung (manchmal dies kann ein Problem sein) – rjdown

Verwandte Themen