| | | | |
| | |
| PHP Code Flüsterer Registriert seit: 21.08.2005 Beiträge: 4682 PHP-Kenntnisse: Fortgeschritten | |
| | ||
| Gast
Beiträge: n/a
| Zitat:
self ist die static referenz auf den Namensraum der Klasse. Wenn die Klasse instatiiert wurde, könnte stattdessen auch $this verwendet werden. __class__ ist eine magische Konstante. Solche Konsruktionen: PHP-Code: In beiden Fällen werden Instanzen auf die Klasse zurückgegeben. http://mod.php.developer.vc/test/24/ (0) ist unnötig (KA, wozu es gut sein soll) und kann weggelassen werden. | |
|
| | |
| Erfahrener Benutzer | self und $this sind als Zeiger zu verstehen die auf die aktuelle Instanz / Klasse zeigen, __CLASS__ ist eine Konstante aus der Kombination des Namespace der Klasse und dem Klassennamen der Klasse, der die Funktion in der Sie genutzt wird repräsentiert, also ein String. das new-Schlüsselwort Interpretiert self und $this sowie jede andere Variable insofern sie eine Objekt-Instanz hält als Objekt-Instanz und jede Variable oder Konstante die einen String enthält als einen Klassennamen. Konstanten generell können nicht direkt mit dem new-Schlüsselwort genutzt werden da sie im Interpreter mit tatsächlichen Klassennamen kollidieren, sie müssen daher stehts einer Variable zugewiesen werden.
__________________ |
| | |
| | |
| Erfahrener Benutzer | Ich weiß aber auch nochmal darauf hin das self als auch __CLASS__ immer auf die Klasse zeigen in der ihre nutzende Methode ethabliert wurde. Szenario: Du definierst test() in class A und extendest A in Class B, so wird b bei aufruf von B::test() "A" zurückliefern. Ganz gleich ob statisch aufgerufen oder instanziiert. Einfach durch die gegen self'en ist nicht immer ein guter Weg, man sollte sich spätestens bei Klassen-Vererbung nicht auf self ( in jedwegen Kontext ) beziehen, sondern grundsätzlich get_called_class() nutzen, alles andere operiert in dem jeweiligen Definitionskontext - static::, classname::, $instance:: und self:: bewirken den gleichen Effekt. PHP-Code: PHP-Code: PHP-Code: Code: array(5) {
["class"]=>
string(1) "a"
["self"]=>
string(1) "a"
["owner"]=>
string(1) "a"
["parent"]=>
bool(false)
["called"]=>
string(1) "b"
}
PHP-Code: Code: array(5) {
["class"]=>
string(1) "b"
["self"]=>
string(1) "b"
["owner"]=>
string(1) "b"
["parent"]=>
string(1) "a"
["called"]=>
string(1) "b"
}
PHP-Code: PHP-Code: Code: array(5) {
["class"]=>
string(1) "a"
["self"]=>
string(1) "a"
["owner"]=>
string(1) "a"
["parent"]=>
bool(false)
["called"]=>
string(1) "d"
}
PHP-Code: PHP-Code: Code: x::test()
array(1) {
["static"]=>
string(1) "x"
}
Solltest du dich also dazu entscheiden, das wenn du dort Instanzen von etwas zurückgeben willst, das es egal ist ob deine Klasse extended wurde oder nicht, dann gehe auch entsprechend vor, in deinem Fall: PHP-Code:
__________________ Geändert von tr0y (11.01.2012 um 07:14 Uhr). Grund: Bezug auf Startpost genommen. |
| | |
| | |
| Erfahrener Benutzer | Das war noch nicht ausführlich ^^ Zu deinem Source.. äh, wie jetzt ? Kontext-Sprung ? o_O
__________________ |
| | |
|
| Themen-Optionen | |
| Thema bewerten | |
|
|
Ähnliche Themen | ||||
| Thema | Autor | Forum | Antworten | Letzter Beitrag |
| [Erledigt] self:: vs. $this-> | Cube | PHP Tipps 2009 | 2 | 01.10.2009 20:16 |
| Unterschied zwischen self, parent, this | dennito | PHP Tipps 2008 | 7 | 21.12.2008 12:24 |
| Php self | PHP Tipps 2005 | 4 | 26.03.2005 14:04 | |
| Besucher kamen über folgende Suchanfragen bei Google auf diese Seite |
| self vs. __class__, \__class__\ \$this\ unterschied php |