warum man in der OOP Funktionen einer Klasse nicht mehr Funktionen nennt, sondern Methoden
Der wesentliche Unterschied zur Funktion ist, daß beim Aufruf einer PHP Methode implizit die Instanz übergeben wird. So hat man innerhalb einer Methode Zugriff auf die Eigenschaften der Instanz und kann mit der Instanz weitere Methoden aufrufen.
In PHP ist dieser Sachverhalt durch die vordefinierte Variable $this
hardcodiert. In Perl hingegen erfolgt die Übergabe explizit, d.h. entweder über den Pfeiloperator oder die Argumentenliste. Der Aufruf kann also so oder so erfolgen;
$f->foo();
foo($f);
Und innerhab einer Perl Methode kann man die Instanz benennen wie man will, gewöhnlich wird sie da $self
genannt oder auch $this
und muss als Solche stets aus der Argumentenliste extrahiert werden
sub foo{
my $self = shift;
}
Um die Verwirrung komplett zu machen; beim Aufruf einer Klassenmethode die auch statische Methoden genannt werden, wird nicht die Instanz übergeben sondern der Name der Klasse. In Perl;
$f = Foo->new();
ist der Konstruktor also eine statische Methode welche die Instanz liefert und heißt gewühnlich new()
wobei man diese Funktion auch anders nennen kann.
In PHP hingegen wird zwischen new und Konstruktor unterschieden. Noch verwirrender in PHP ist, Eigenschaften der Instanz klassenweit zu deklarieren obwohl noch gar keine Instanz existiert. Man kann aber auch in PHP die Eigenschaften innerhalb des Konstruktors vergeben, so sieht man auch daß die zur Instanz gehören und nicht zur Klasse.
MFG