SELFPHP: Version 5.8.2 Befehlsreferenz - Tutorial – Kochbuch – Forum für PHP Einsteiger und professionelle Entwickler

SELFPHP


Professional CronJob-Service

Suche



CronJob-Service    
bei SELFPHP mit ...



 + minütlichen Aufrufen
 + eigenem Crontab Eintrag
 + unbegrenzten CronJobs
 + Statistiken
 + Beispielaufrufen
 + Control-Bereich

Führen Sie mit den CronJobs von SELFPHP zeitgesteuert Programme auf Ihrem Server aus. Weitere Infos



:: Buchempfehlung ::

TYPO3 Kochbuch

TYPO3 Kochbuch zur Buchempfehlung
 

:: Anbieterverzeichnis ::

Globale Branchen

Informieren Sie sich über ausgewählte Unternehmen im Anbieterverzeichnis von SELFPHP  

 

:: Newsletter ::

Abonnieren Sie hier den kostenlosen SELFPHP Newsletter!

Vorname: 
Name:
E-Mail:
 
 

Zurück   PHP Forum > SELFPHP > PHP für Fortgeschrittene und Experten

PHP für Fortgeschrittene und Experten Fortgeschrittene und Experten können hier über ihre Probleme und Bedenken talken

Antwort
 
Themen-Optionen Ansicht
  #1  
Alt 06.08.2006, 23:28:38
feuervogel feuervogel ist offline
SELFPHP Guru
 
Registriert seit: Jan 2004
Ort: Leipzig
Beiträge: 4.549
php5: objekt A soll zu object B werden

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 
{

    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    = 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?

Geändert von feuervogel (06.08.2006 um 23:29:34 Uhr)
Mit Zitat antworten
  #2  
Alt 07.08.2006, 12:29:46
Opendix Opendix ist offline
Senior Member
 
Registriert seit: Oct 2004
Ort: Werdenberg / Schweiz
Alter: 36
Beiträge: 1.476
AW: php5: objekt A soll zu object B werden

Das was du hier machst führt bei mir hier im Geschäft zu einer Prozessorauslastung von 100% durch den Apache! :S
Ich werde es wohl heute Abend mal noch zuhause versuchen!

edit: zuhause funktionierts... bzw. eben nicht!

Aber warum prüfst du das nicht einfach vor dem instanzieren und kreierst dann eben gleich eine Instanz von B anstatt von A.
ausführen tust du das ja sowiso im konstruktor! oder kann das auch sonst noch ändern?
__________________
Opendix lehnt jegliche Haftung für evtl. vorhandene Fehler in der Grammatik sowie der Satzstellung ab! Bitte wenden Sie sich an die Tastatur!

Betatester gesucht:
Skiclub Gams / CEVI Grabs

Geändert von Opendix (07.08.2006 um 13:40:28 Uhr)
Mit Zitat antworten
  #3  
Alt 09.08.2006, 13:03:31
Benutzerbild von yozek
yozek yozek ist offline
Junior Member
 
Registriert seit: May 2004
Ort: Köln
Alter: 43
Beiträge: 226
yozek eine Nachricht über ICQ schicken yozek eine Nachricht über MSN schicken
AW: php5: objekt A soll zu object B werden

Huhu,

endlich KANN ich mal helfen *fg*
Wir haben hier das Phänomen: "Den Wald vor lauter Bäume nicht mehr sehen".

Dein Codebeispiel liefert das Ergebnis, weil du eine REFERENZ auf $this setzt.
Bedeutet also, dass alle Änderungen von $that, die du tätigst, direkt auch Einfluss auf $this haben ;)

HTH
__________________
yozek

King of my castle - 127.0.0.1
Computer befreien das Denken vom Rechnen

Geändert von yozek (09.08.2006 um 13:04:30 Uhr)
Mit Zitat antworten
  #4  
Alt 09.08.2006, 20:20:23
feuervogel feuervogel ist offline
SELFPHP Guru
 
Registriert seit: Jan 2004
Ort: Leipzig
Beiträge: 4.549
AW: php5: objekt A soll zu object B werden

@opendix: ja, um es mal etwas zu konkretisieren: meine beiden klassen sind disjunkte unterklassen einer oberklasse. die oberklasse ist "graph" und die unteren klassen sind "gerichteter graph" und "ungerichteter graph". wenn man nun dem konstruktor eines ungerichteten graphen die id des graphen gibt, die zu ihm gehört und er merkt, dass der graph mit dieser id ein gerichteter ist, soll daraus auch ein gerichteter graph werden.

es wäre nun möglich aber mir widerstrebend wenn ich vor dem instanziieren feststellen sollte, ob der ungerichtete graph den ich erzeugen will auch ein ungerichteter graph ist.

@yozek: ja, klaro, aber nach meinem verständnis ist $this eine referenz auf die variable $b (in meinem beispielfall oben). wieso ändert die $that $this aber nicht $b? und wieso darf ich $this nichts zuweisen aber $that wenn $that eine referenz auf $this ist...? naja, ich werds ncoh mal überschlafen und mich um die anderen 1000 baustellen kümmern...
Mit Zitat antworten
  #5  
Alt 14.08.2006, 21:26:02
Benutzerbild von xabbuh
xabbuh xabbuh ist offline
SELFPHP Guru
 
Registriert seit: May 2003
Beiträge: 7.187
AW: php5: objekt A soll zu object B werden

Kannst du dein Problem nicht besser über eine Factory lösen?

Um mal bei deinem Beispiel zu bleiben, könnte das dann beispielsweise so aussehen:
PHP-Code:
<?php
    
class A
    
{
        public function 
doSomething()
        {
            echo 
'A';
        }
    }

    class 
B
    
{
        public function 
doSomething()
        {
            echo 
'B';
        }
    }

    class 
Factory
    
{
        private 
$object null;

        public function 
__construct($n)
        {
            if(
$n == 5) {
                
$object = new A;
            } else {
                
$object = new B;
            }
        }

        public function 
doSomething()
        {
            
$object->doSomething();
        }
    }

    
$a = new Factory(5);
    
$b = new Factory(3);

    
$a->doSomething();    //  Ausgabe: A
    
$b->doSomething();    //  Ausgabe: B
?>

Geändert von xabbuh (14.08.2006 um 21:27:22 Uhr)
Mit Zitat antworten
  #6  
Alt 12.09.2006, 08:50:19
Benutzerbild von xabbuh
xabbuh xabbuh ist offline
SELFPHP Guru
 
Registriert seit: May 2003
Beiträge: 7.187
AW: php5: objekt A soll zu object B werden

Ich habe gerade noch ein Kapitel in der Dokumentation gefunden: http://www.php.net/manual/en/language.oop.newref.php
Vielleicht hilft dir das auch noch weiter.

Geändert von xabbuh (12.09.2006 um 08:50:33 Uhr)
Mit Zitat antworten
Antwort


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 
Themen-Optionen
Ansicht

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind aus.
[IMG] Code ist aus.
HTML-Code ist aus.

Gehe zu

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Kann eine Klasse in einer Eigenschaft ein Objekt, einer anderen Klasse instanzieren? Balthazzar PHP für Fortgeschrittene und Experten 6 06.07.2006 17:06:36
PHP5 spinnt SK-Genius PHP für Fortgeschrittene und Experten 0 10.05.2005 18:38:16
PHP5: Exception im Konstruktor verhindert Instanziierung Quadaptor PHP für Fortgeschrittene und Experten 10 31.03.2005 21:52:15
PHP5 kennt MySQL_Connect() nicht mehr SK-Genius MySQLi/PDO/(MySQL) 9 13.10.2004 14:12:09
object in object über eval ausgeben? Xantos PHP für Fortgeschrittene und Experten 1 02.04.2004 16:26:39


Alle Zeitangaben in WEZ +2. Es ist jetzt 05:19:41 Uhr.


Powered by vBulletin® Version 3.8.3 (Deutsch)
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.


© 2001-2024 E-Mail SELFPHP OHG, info@selfphp.deImpressumKontakt