2010-12-05 14 views
26

Was ist der Unterschied zwischen diesen Objektaufrufen?PHP: Statische und nicht statische Funktionen und Objekte

Nicht Statisch:

$var = new Object; 
$var->function(); 

Statisch:

$var = User::function(); 

Und auch im Inneren ein class warum sollte ich die statische Eigenschaft für Funktionen nutzen?

Beispiel:

static public function doSomething(){ 
    ...code... 
} 
+7

-1 Es scheint mir, dass Ihre letzten Fragen zu grundlegenden Sprachfunktionen waren. ich schlage vor, Sie auf dem PHP-Handbuch oder ein Buch zuerst für die grundlegende Syntax fragt nachlesen. wiederholt Erklärungen unzweckmäßig ist – mario

+19

@mario. Ein bisschen hart. Vielleicht Cirk las das Handbuch und nicht ganz das Konzept. Scheint fair zu anderen Programmierer für einen Beitrag zu fragen. – Ben

+1

@ Ben. Vielleicht zu hart. Aber ich wollte nicht downvote ohne Kommentar oder nur mit einem * RTFM * -Link. Und meine Vermutung ist, dass er tatsächlich etwas darüber gelesen hat re, aber bat um "eine zweite Meinung" hier. Was wäre besser, wenn er es nur gesagt hätte. – mario

Antwort

33

Statische Funktionen können per Definition nicht von Instanzeigenschaften der Klasse abhängen. Das heißt, sie benötigen keine Instanz der Klasse, die ausgeführt werden kann (und können so ausgeführt werden, wie Sie es gezeigt haben, ohne zuerst eine Instanz zu erstellen). In einem gewissen Sinn bedeutet dies, dass die Funktion nicht von Mitgliedern oder Methoden (öffentlich oder privat) der Klasse abhängt (und dies auch nie tun muss).

+3

Was bringt es, statische Funktionen in einer Klasse zu platzieren, anstatt in einer separaten functions.php-Datei? – billmalarky

+8

@billmalarky Es ist nicht wichtig, aber es hilft Ihnen zumindest dabei, Ihre Funktionen in einer Datei zu organisieren, in der sie relevant sind. Für mich ist es einfacher und logischer eine Funktion wie 'User :: somefunction haben();' statt 'Funktion :: someUserFunction;' und sicherlich besser als 'Funktion();' – AL2

7

Statische Methoden und Mitglieder gehören zu der Klasse selbst und nicht auf die Instanz einer Klasse.

7

Statische Funktionen oder Felder sind nicht auf Initialisierung angewiesen; daher statisch.

7

Der Unterschied liegt im Variablenbereich. Stellen Sie sich vor Sie haben:

class Student{ 
    public $age; 
    static $generation = 2006; 

    public function readPublic(){ 
     return $this->age; 
    } 

    public static function readStatic(){ 
     return $this->age;   // case 1 
     return $student1->age; // case 2 
     return self::$generation; // case 3 

    } 
} 

$student1 = new Student(); 
Student::readStatic(); 
  1. Sie statische Funktion nicht wissen kann, was $ ist dies, weil es statisch ist. Wenn es ein $ dieses geben könnte, hätte es $ studentin1 und nicht Student gehört.

  2. Es weiß auch nicht, was $ Student1 ist.

  3. Es funktioniert für Fall 3, da es eine statische Variable ist, die zu der Klasse gehört, im Gegensatz zu vorherigen 2, die zu Objekten gehören, die instanziiert werden müssen.

0

Fragen zu STATISCHEN Funktionen kommen immer wieder zurück.

Statische Funktionen können per Definition nicht von Instanzeigenschaften der Klasse abhängen. Das heißt, sie benötigen keine Instanz der Klasse, die ausgeführt werden kann (und kann auch ausgeführt werden.) In einem gewissen Sinn bedeutet dies, dass die Funktion nicht von Mitgliedern oder Methoden (öffentlich oder privat) abhängt (und dies auch nie tun muss)) der Klasse.

class Example { 

    // property declaration 
    public $value = "The text in the property"; 

    // method declaration 
    public function displayValue() { 
     echo $this->value; 
    } 

    static function displayText() { 
     echo "The text from the static function"; 
    } 
} 


$instance = new Example(); 
$instance->displayValue(); 

$instance->displayText(); 

// Example::displayValue();   // Direct call to a non static function not allowed 

Example::displayText(); 
Verwandte Themen