Ankündigung

Einklappen
Keine Ankündigung bisher.

[Erledigt] Namespace instanziierender Klasse ermitteln

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • [Erledigt] Namespace instanziierender Klasse ermitteln

    Hallo zusammen,

    Folgenden Gedanken habe ich:

    Zur Info: new Superklasse soll eigentlich new \Superklasse lauten. Das wird hier anscheinend verschluckt.

    Im Namespace Test liegt eine Klasse Test:
    PHP-Code:
    <?php namespace Test;

    class 
    Test
    {
      public function 
    __construct()
      {
        
    /* ... */
        
    $test = new Superklasse;
        echo 
    "Namespace: $test";
        
    /* ... */
      
    }
    }
    Und im Root-Namespace eine Klasse Superklasse:
    PHP-Code:
    <?php

    class Superklasse
    {
      public function 
    __toString()
      {
        return 
    __NAMESPACE__;
      }
    }
    Wie erwartet gibt die Superklasse nichts zurück. Ich möchte jedoch gerne aus der Superklasse den Namespace der Klasse zurückgeben, welche die Superklasse instanziiert, Test.

    Hierzu ist mein Vorgehen bisher __NAMESPACE__ als Parameter bei der Instanziierung mitzugeben.

    PHP-Code:
        /* ... */
        
    $test = new Superklasse(__NAMESPACE__);
        echo 
    "Namespace: $test";
        
    /* ... */ 
    Frage:
    Gibt es eine schönere Lösung?

    Vielen Dank im Voraus!
    Grüße

  • #2
    strpos(get_called_class(), '\\') -> str_replace('\\', '/', get_called_class()) -> basename()
    [URL="https://gitter.im/php-de/chat?utm_source=share-link&utm_medium=link&utm_campaign=share-link"]PHP.de Gitter.im Chat[/URL] - [URL="https://raindrop.io/user/32178"]Meine öffentlichen Bookmarks[/URL] ← Ich habe dir geholfen ? [B][URL="https://www.amazon.de/gp/wishlist/348FHGUZWTNL0"]Beschenk mich[/URL][/B].

    Kommentar


    • #3
      Hallo tr0y,

      danke für deine Antwort.

      Leider ist das nicht wonach ich suche. In deinem Beispiel gibt die Klasse Superklasse nur ihren eigenen Klassenpfad zurück. Vielleicht habe ich es falsch erklärt.

      1. \Test\Test instanziiert \Superklasse ohne Parameter.
      PHP-Code:
      $test = new \Superklasse
      2. \Test\Test ruft die Methode __toString() der Instanz von \Superklasse auf.
      PHP-Code:
      echo $test
      3. Die Rückgabe der Methode soll \Test\Test sein, und nicht \Superklasse.

      Kommentar


      • #4
        Achso.. ja das dinge indem du debug_backtrace() auswertest, dein Vorhaben widerspricht aber OOP, den eine Klasse sollte nicht interessieren wer es instanziiert.
        [URL="https://gitter.im/php-de/chat?utm_source=share-link&utm_medium=link&utm_campaign=share-link"]PHP.de Gitter.im Chat[/URL] - [URL="https://raindrop.io/user/32178"]Meine öffentlichen Bookmarks[/URL] ← Ich habe dir geholfen ? [B][URL="https://www.amazon.de/gp/wishlist/348FHGUZWTNL0"]Beschenk mich[/URL][/B].

        Kommentar


        • #5
          __NAMESPACE__ ist eine Konstante und wird dir auch niemals den Namespace einer anderen Klasse liefern.
          Um an den Namespace einer Klasse heranzukommen schau dir ReflectionClass an.

          Kommentar


          • #6
            @tr0y:
            Das wäre tatsächlich eine Lösung, auch wenn sie mir nicht gefällt. Trotzdem vielen Dank!

            @jspit:
            Dessen bin ich mir bewusst, trotzdem vielen Dank.

            Kommentar

            Lädt...
            X