2012-04-06 12 views
2

Ich bin PHP als funktionale und Verfahrenssprache gelernt. Gerade jetzt versuchen Sie, objektorientiert zu lernen und haben eine wichtige Frage bekommen.Klasse funktioniert, ohne Variablen zu deklarieren?

Ich habe Code:

class car { 

    function set_car($model) { 
     $this->model = $model; 
    } 

    function check_model() 
    { 
     if($this->model == "Mercedes") echo "Good car"; 
    } 

} 

$mycar = new car; 
$mycar->set_car("Mercedes"); 

echo $mycar->check_model(); 

Warum es funktioniert ohne Angabe von $ Modell?

var $model; am Anfang?

Weil in PHP "Auto-Deklaration" für beliebige Variablen funktioniert? Ich bin stecken

Antwort

4

Jedes Objekt in PHP können sie Mitglieder w/o erklärt bekommen:

$mycar = new car; 
$mycar->model = "Mercedes"; 
echo $mycar->check_model(); # Good car 

Das Standardverhalten von PHP ist. Das sind öffentlich. Siehe manual.

+0

Ja, Sie können dies tun, aber es bedeutet nicht Sie * sollten *. Darf ich dem OP etwas davon erzählen? – liquorvicar

+0

Can bedeutet nicht, dass Sie auch nicht, also was zu erklären? Es ist nicht definiert (dynamisches Mitglied), es ist öffentlich - beides wurde in der Antwort erwähnt. Worüber bist du besonders besorgt? – hakre

+0

Ich glaube nicht, dass es ein sehr gutes OO-Design ist, es sei denn, es ist absolut notwendig (und selbst dann kämpfe ich um einen Fall, wenn es absolut notwendig ist). Angesichts der Tatsache, dass das OP für PHP neu ist (und ich vermute, dass es auch für OO neu ist), sollten wir nicht auf die Gefahren für ihn hinweisen und dass der Standardwert sein sollte, alle Klasseneigenschaften zu deklarieren. – liquorvicar

1

Nein, es ist, weil $ Modell ein Argument der Funktion set_car ist. Argumente sind nicht genau Variablen, sondern Platzhalter (Verweise) auf die Variablen oder Werte, die beim Aufruf der Funktion (oder Klassenmethode) gesetzt werden. Zum Beispiel nimmt das $ -Modell den Wert "Mercedes" an, wenn es set_car aufruft.

1

Ja. Aber so werden Variablen öffentlich. Und Deklarationsklassenvariable als "var" ist veraltet - verwenden Sie public, protected oder private.

3

Ja, wenn es nicht existiert, erklärt PHP es im laufenden Betrieb für Sie.

Es ist eleganter, es trotzdem zu definieren, und wenn man mit extends arbeitet, wird es empfohlen, weil man seltsame Situationen bekommen kann, wenn man die gleichen Variablen verwendet und auch nicht privat, geschützt oder öffentlich definiert.

Weitere Informationen: http://www.php.net/manual/en/language.oop5.visibility.php

3

PHP-Klasse-Mitglieder können jederzeit erstellt werden. Auf diese Weise wird es als public Variable behandelt. Um eine private Variable zu deklarieren, müssen Sie dies deklarieren.

Verwandte Themen