PHP 5.2: Klassenname eines konkreten Kindobjektes in abstrakter Klasse erhalten

Ich hatte nun schon öfter das Vergnügen, den Klassennamen eines Objektes in der abstrakten Elternklasse zu benötigen.

Dies ist zum Beispiel erforderlich, um eine statische Methode, aus einer Methode der abstrakten Klasse heraus, auf der konkreten Klasse aufzurufen.

Zunächst hatte ich die Idee dies über die magische Konstante __CLASS__ zu lösen. Sinnvollerweise (keine Ironie) liefert diese allerdings den Namen der abstrakten Klasse, in der die Methode steht zurück.

Also hier die Lösung, wie man das ganze sinnvoll mit etwas Verstand lösen kann, nämlich einfach per "get_class($this)":

  1. abstract class AbstractTest {
  2.     public function getClassname1(){
  3.         return __CLASS__;
  4.     }  
  5.  
  6.     public function getClassname2(){
  7.         return get_class($this);
  8.     }  
  9. }
  10.  
  11. class Test extends AbstractTest {
  12.    
  13. }
  14.  
  15. $test = new Test();
  16.  
  17. echo $test->getClassname1(); //Ergebnis: "AbstractTest"
  18. echo $test->getClassname2(); //Ergebnis: "Test"

Viel Spaß damit!

Einordnung:

Comments

Post new comment

The content of this field is kept private and will not be shown publicly. If you have a Gravatar account associated with the e-mail address you provide, it will be used to display your avatar.
  • Web page addresses and e-mail addresses turn into links automatically.
  • Internal paths in single or double quotes, written as "internal:node/99", for example, are replaced with the appropriate absolute URL or path. Paths to files in single or double quotes, written as "files:somefile.ext", for example, are replaced with the appropriate URL that can be used to download the file.
  • Allowed HTML tags: <a> <em> <strong> <cite> <code> <ul> <ol> <li> <dl> <dt> <dd><blockquote>
  • Lines and paragraphs break automatically.
  • Pairs of<blockquote> tags will be styled as a block that indicates a quotation.
  • You can enable syntax highlighting of source code with the following tags: <c>, <cpp>, <css>, <drupal5>, <drupal6>, <java>, <javascript>, <mysql>, <php>, <python>, <ruby>, <smarty>, <xml>. The supported tag styles are: <foo>, [foo]. PHP source code can also be enclosed in <?php ... ?> or <% ... %>.
  • Textual smileys will be replaced with graphical ones.
  • Each email address will be obfuscated in a human readable fashion or (if JavaScript is enabled) replaced with a spamproof clickable link.

More information about formatting options

Type the characters you see in this picture. (verify using audio)
Type the characters you see in the picture above; if you can't read them, submit the form and a new image will be generated. Not case sensitive.