Was sind Routinen Bezeichner die vorne dran __ stehen haben?
MB
- php
moin community,
die Eigenschaft vordefinierten magischen Methoden in Klassen wie __construct
, __destruct
, __invoke
, __wakeup
, __sleep
und ihre Verwendung sind mir Bekannt. Ich weis aber nicht was zwei __
vor einer methode oder Funktion zusuchen haben und welchen Zweck diese erfüllen. Ich hab gelesen, dass das auch magische Funktionen/Methoden seien sollen und dass sie ausgeführt werden ohne aufgerufen worden zu sein. Ich hab mich dran versucht mit keinem Ergebnis :/.
Was sind diese "Magischen" Routinen die nicht in Klassen vordefiniert sind und welchen Zweck erfüllen sie? Oder sind das Routinen nur Bezeichner aus PHP-Code Konventionen?
vlg MB
Tach!
die Eigenschaft vordefinierten magischen Methoden in Klassen wie
__construct
,__destruct
,__invoke
,__wakeup
,__sleep
und ihre Verwendung sind mir Bekannt. Ich weis aber nicht was zwei__
vor einer methode oder Funktion zusuchen haben und welchen Zweck diese erfüllen.
Das Handbuch klärt auf, auf der Seite zu den Magic Methods:
„PHP reserves all function names starting with __ as magical. It is recommended that you do not use function names with __ in PHP unless you want some documented magic functionality.“
Es ist also nur eine Namenskonvention, damit von PHP vergebene Bezeichner nicht mit denen von Verwendern zusammenfallen und in zukünftigen Versionen Probleme bereiten, falls PHP eine neue magische Methode hinzufügt.
Ich hab gelesen, dass das auch magische Funktionen/Methoden seien sollen und dass sie ausgeführt werden ohne aufgerufen worden zu sein. Ich hab mich dran versucht mit keinem Ergebnis :/.
Natürlich müssen sie zum Ausgeführtwerden auch aufgerufen werden. Nur ist es nicht der Verwender, der sie aufruft, sondern PHP ruft sie zu bestimmten Situationen auf. Du als Verwender kannst sie auch selbst aufrufen, nur ergibt das meist keinen Sinn. Es sind ansonsten ganz normale Methoden.
Was sind diese "Magischen" Routinen die nicht in Klassen vordefiniert sind und welchen Zweck erfüllen sie?
Da kenne ich nur __autoload() als einzelne Funktion.
Oder sind das Routinen nur Bezeichner aus PHP-Code Konventionen?
Ja. Es ist festgelegt, dass Methoden dieses Namens in bestimmten Situationen von PHP gesucht werden, und wenn es sie gibt, werden sie aufgeführt.
dedlfix.
moin dedlfix,
Das Handbuch klärt auf, auf der Seite zu den Magic Methods:
Ich habs gelesen und bin nicht schlauer draus geworden 😟
Es ist also nur eine Namenskonvention, damit von PHP vergebene Bezeichner nicht mit denen von Verwendern zusammenfallen und in zukünftigen Versionen Probleme bereiten, falls PHP eine neue magische Methode hinzufügt.
Also ist es nur ne stink normale Routine?
Natürlich müssen sie zum Ausgeführtwerden auch aufgerufen werden. Nur ist es nicht der Verwender, der sie aufruft, sondern PHP ruft sie zu bestimmten Situationen auf.
Ja das ist mir bewusst. Ich meine, ob es selbst defenierte magische methoden gibt, die, wie du sagstest, in bestimmten Situationen, von PHP selbst aufgerufen werden, ohne zutun vom Coder selbst.
Was sind diese "Magischen" Routinen die nicht in Klassen vordefiniert sind und welchen Zweck erfüllen sie?
Da kenne ich nur __autoload() als einzelne Funktion.
ne ich meine die mangischen die nicht definiert sind wie __contruct
oder __autoload
sonder z.B. __add
oder __has
wie ich oben kommentiert habe.
vlg MB
Tach!
Es ist also nur eine Namenskonvention, damit von PHP vergebene Bezeichner nicht mit denen von Verwendern zusammenfallen und in zukünftigen Versionen Probleme bereiten, falls PHP eine neue magische Methode hinzufügt.
Also ist es nur ne stink normale Routine?
Ja, was erwartest du von ihnen? Sie unterscheiden sich in nichts von anderen Methoden.
Ja das ist mir bewusst. Ich meine, ob es selbst defenierte magische methoden gibt, die, wie du sagstest, in bestimmten Situationen, von PHP selbst aufgerufen werden, ohne zutun vom Coder selbst.
ne ich meine die mangischen die nicht definiert sind wie
__contruct
oder__autoload
sonder z.B.__add
oder__has
wie ich oben kommentiert habe.
Wenn sie im Handbuch nicht erwähnt sind, werden sie wohl auch nicht von PHP aufgerufen werden. Mit Bestimmtheit kann ich das nicht sagen, dazu müsste man den Code von PHP vollständig kennen, aber es ergibt keinen Sinn, dass PHP undokumentierte Methodennamen im Userland sucht. Wenn PHP in seinem Inneren eine Funktion braucht, dann ist die in C geschrieben und muss nicht den Umweg über PHP-Syntax gehen.
dedlfix.
jo das wollte ich wissen vielen dank dafür.
vlg MB
Hi,
Natürlich müssen sie zum Ausgeführtwerden auch aufgerufen werden. Nur ist es nicht der Verwender, der sie aufruft, sondern PHP ruft sie zu bestimmten Situationen auf.
Ja das ist mir bewusst. Ich meine, ob es selbst defenierte magische methoden gibt, die, wie du sagstest, in bestimmten Situationen, von PHP selbst aufgerufen werden, ohne zutun vom Coder selbst.
also Du meinst sowas:
Du schreibst eine __myTeatimeRoutine, und PHP soll dann von sich aus wissen, wann bei Dir Teezeit ist und die Routine dann aufrufen?
Daß das nicht funktionieren kann, sollte eigentlich klar sein - woher sollte PHP wissen, wann vom User definierte Funktionen aufgerufen werden sollen.
cu,
Andreas a/k/a MudGuard