Hallo!
Ich habe da ein Problem. Ich habe zwei Klassen A und B. Wenn man nun eine Instanz der Klasse A erzeugen will, soll überprüft werden, ob denn das überhaupt passend ist für ein Objekt A und nicht eher ein Objekt B. Ich will dabei keine Exception werfen falls das Objekt gar nicht erzeugt werden kann, sondern ich würde gerne sowas haben
$o = new A(5);
//wenn nun A mit dem Wert 5 nicht erzeugt werden darf sondern dadurch kein Objekt des Typs A sein darf, sollte nun folgene abfrage eine ausgabe erzeugen:
if( $o instanceof B ) {
echo "ausgabe";
}
Ich schlingel habe natürlich erst mal sowas gemacht:
class A {
public function __construct($n) {
if( $n == 5 ) {
$this = new B($n);
}
}
}
haha! redeclaration of this ist nicht möglich. aber ich habe kurz nachgedacht, und bin zu diesem beispiel gekommen, welches mich verwirrt:
PHP-Code:
<?php
error_reporting( E_ALL );
class A {
public function __construct() {
$that = &$this;
echo "var_dump( \$this ) zum ersten:<pre>";
var_dump( $this );
echo "</pre>";
echo "var_dump( \$that ) zum ersten:<pre>";
var_dump( $that );
echo "</pre>";
$that = new B();
echo "var_dump( \$this ) zum zweiten:<pre>";
var_dump( $this );
echo "</pre>";
echo "var_dump( \$that ) zum zweiten:<pre>";
var_dump( $that );
echo "</pre>";
}
}
class B {
}
$b = new A();
echo "var_dump( \$b ) zum ersten:<pre>";
var_dump( $b );
echo "</pre>";
?>
wieso zur hölle, hat $this den Typ B aber $b den Typ A ??? Ich habs doch nun wirklich geschafft, das blöde PHP auszutricksen...hat jemand eine Idee, wie ich das Problem lösen kann, dass auch $b eine Instanz von B() ist?