MB: Was sind Routinen Bezeichner die vorne dran __ stehen haben?

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

Akzeptierte Antworten zum Thema:

  1. 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.

    1. 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

      1. 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.

        1. jo das wollte ich wissen vielen dank dafür.

          vlg MB

      2. 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