2016-08-16 4 views
-1

Ich habe einige Funktionen in einer Klasse zusammengefasst. Einige der Funktionen verwenden die gleiche Liste, um etwas Rechenarbeit zu leisten. Gibt es eine Möglichkeit, die Liste so zu platzieren, dass alle Funktionen immer noch auf die Liste zugreifen können, anstatt die Liste in jede Funktion einzufügen, die die Liste benötigt?Zugriff auf eine Klassenvariable innerhalb einer Funktion mit PHP

// Simplified version of what I am trying to do 
Class TestGroup 
{ 
    public $classArray = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]; 

    public function getFirstFiveElemFromArray() 
    { 
     $firstFive = array_slice($this -> $classArray, 0, 5, true); 
     return $firstFive; 
    } 

    public function sumFirstEightElemFromArray() 
    { 
     //methods to get first eight elements and sum them up 
    } 

} 

$test = new TestGroup; 
echo $test -> getFirstFiveElemFromArray(); 

Dies ist die Fehlermeldung erhalte ich:

Undefined variable: classArray in C:\wamp\www\.. 

Antwort

1

entfernen Sie die $ Linie 8. Ihr eine Variable innerhalb der Klasse zugreifen. Innerhalb der Klasse rufen Sie Methoden und Variablen wie folgt auf: $this->myMethod() und $this->myVar. Außerhalb der Klasse rufen Sie die Methode und var wie $test->myMethod() und $test->myVar.

Beachten Sie, dass sowohl Methoden als auch Variablen als privat oder öffentlich definiert werden können. Abhängig davon können Sie auf sie außerhalb der Klasse zugreifen.

// Simplified version of what I am trying to do 
Class TestGroup 
{ 
    public $classArray = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]; 

    public function getFirstFiveElemFromArray() 
    { 
     $firstFive = array_slice($this -> classArray, 0, 5, true); 
     return $firstFive; 
    } 

    public function sumFirstEightElemFromArray() 
    { 
     //methods to get first eight elements and sum them up 
    } 

} 

$test = new TestGroup; 
echo $test -> getFirstFiveElemFromArray(); 
1

Sie versuchen zu access an object member, so sollten Sie $this->classArray verwenden. Wenn Sie das Dollarzeichen dort haben, würde $classArray (das nicht definiert wird) ausgewertet werden.

z. Wenn Sie $classArray = 'test' vor die Zeile setzen, die mit $firstFive = beginnt, wird PHP versuchen, auf das Testmitglied zuzugreifen und sagen, dass es nicht existiert.

Also: Entfernen Sie das Dollarzeichen. :-)

Verwandte Themen