ooP - parent class soll namen der child class auspucken

NetBull

Erfahrenes Mitglied
Hi Leute,

ich habe leider nix bei google gefunden und so frag ich hier.

Problem:
Code:
class parent
	{
		function __call($aMethodName, $aArguments)
		{/* on overload or non existing classes,.... */
			echo "Missing method $aMethodName!";

			/* wie weis ich nun welches child die Methode ausgelöst hat? */
			
		}
	}
	
	class child extends parent
	{
		
	}
	
	$c = new child();
	$c->test(); // führt zum Aufruf von __call in der Parent Klasse

Wie kann ich in der Parent Klasse den Namen des Child herausfinden? Oder muss ich zwingend den Namen per Member in jeder ChildKlasse führen?

cu s00n
deAndro
 
Sollte doch so funktionieren:

PHP:
<?php
	class vater
    {
        function __call($aMethodName, $aArguments)
        {/* on overload or non existing classes,.... */
            echo "Missing method $aMethodName!";
 
			echo get_class($this);
 
            /* wie weis ich nun welches child die Methode ausgelöst hat? */
            
        }
    }
    
    class kind extends vater
    {
        
    }
	
	class tochter extends vater
	{
	}
    
    $c = new kind();
    $c->test(); // führt zum Aufruf von __call in der Parent Klasse
	
	$d = new tochter();
	$d->foo();
?>
 
Oder eben get_called_class()

Scheint tatsächlich zu funktionieren. Hätte nicht erwartet, das eine als für statische Methoden deklarierte Funktion auch im nicht-statischen Scope funktioniert.

Genau aus diesem Grund würde ich davon abraten, das so zu machen, denn es könnte sein, das die PHP-Entwickler das umbauen, das es nur noch für statische Aufrufe funktioniert.
 
Das ist sogar für mich neu: mir war nicht bewusst, dass get_called_class() eigentlich nur für statische Methoden gedacht ist, aber letztendlich steht dort auch nur, dass es den Late-Binding-Klassennamen ausgibt, der auch bei Methoden anderen Types besteht und es somit kein Problem darstellen dürfte.
 
Zurück