2012-04-08 8 views
0

Ich versuche statische Methode zu verwenden (ich möchte keine Klasse instanziieren). und ich lege dieses Beispiel.Statische Methode/Funktion der Klasse in PHP

<?php 
    class RootClass { 
    const Member = 20; 
    public static function Member() { 
     return self::Member; 
    } 
    } 

    class NewClass { 
    private $ValNewClass = ""; 
    private function InitNewClass() { 
     $this->ValNewClass = RootClass::Member(); 
    } 
    public static function GetNewVal() { 
     $this->InitNewClass(); 
     $Validation = true; 
     if ($this->ValNewClass>10){ 
     echo "greater than 10"; 
     $Validation = false; 
     } else { 
     echo "Not greater than 10"; 
     } 
     return $Validation; 
    } 
    } 
    $Val2 = NewClass::GetNewVal(); //It must print "greater than 10" 
?> 

Ich muß wissen, wo mein Fehler ist. Dies ist kein echter Code, nur eine einfache Form für Fragen.

Vielen Dank.

+1

Warum '$ this' hier:' $ this-> InitNewClass(); '? –

+0

Als Randbemerkung verwenden Sie die richtige Namenskonvention, ALL_CAPS für Konstanten, lower_case() oder camelCase() für Funktionsnamen und $ Variablen und First_letter_uppercased für Klassennamen. –

+0

Sie können nicht '$ this' statische Methoden verwenden, ändern Sie es in' self' – rdo

Antwort

0
<?php 
    class Rootclass { 
    const MEMBER = 20; 
    public static function member() { 
     return self::MEMBER; 
    } 
    } 

    class Newclass { 
    private static $valnewclass = ""; 
    private function initnewclass() { 
     self::$valnewclass = Rootclass::member(); 
    } 
    public static function getnewval() { 
     self::initnewclass(); //Initialice Val for make comparation 
     $validation = true; 
     if (self::$valnewclass>10){ 
     echo "<br>greater than 10"; 
     $Validation = false; 
     } else { 
     echo "<br>Not greater than 10"; 
     } 
     return $validation; 
    } 
    } 
    $Val2 = Newclass::getnewval(); //It must print "greater than 10" 
    echo "<br>After"; 
?> 

Danke Der Code funktioniert.

Chepe.

0

In PHP ist die Variable $ this innerhalb einer als statisch deklarierten Methode nicht verfügbar.

0

Sie können innerhalb Ihrer statischen Methode nicht auf nicht statische Felder verweisen. Werte innerhalb dieser Art von Klassen können nicht objektabhängig sein. Wenn Sie das Feld $ this-> verwenden, beziehen Sie sich auf den Wert innerhalb einer Instanz der Klasse. Wenn Sie das statische Feld ändern möchten, sollten Sie das self :: field verwenden.