Robbe: statische Klasse in Obj mehrfach includieren, mit CodeBsp!

Hallo Selfer,

Ich habe folgendes Problem (oder Denkfehler?)..

Ich versuche eine statische Klasse in Objektklassen mehrfach einzubinden, da ja jd. Klasse ihre eigene "Umgebung" besitzt und nichts vom sog. MainProgramm weiss, es sei ich importiere es.

Sachverhalt:
Ich versuche eine statische Klasse in mehreren Objekten einzubinden, dies scheitert jedoch mit "Fatal error: Cannot redeclare class test3 in ...\prob02_c3.php on line 4"..

Hier das konkrete Beispiel (Einfach in sep. Dateien in ein Verzeichniss kopieren und prob02.php starten [PHP4]):

---------------------------------------------------
file: prob02.php
---------------------------------------------------
<?php

include("prob02_c1.php");
$obj1 = new test1();
$obj1->machwas();

include("prob02_c2.php");
$obj2 = new test2();
$obj2->machwas();

?>
---------------------------------------------------

---------------------------------------------------
prob02_c1.php - DummyObjekt 2
---------------------------------------------------
<?php

class test1
{

function test1()
 {
  echo "constructor on test1<br>";
 }

function machwas()
 {
  echo "test1 on work...<br>";
  include("prob02_c3.php");
  test3::machwas();

}

}

?>
---------------------------------------------------

---------------------------------------------------
prob02_c2.php - DummyObjekt 2
---------------------------------------------------
<?php

class test2
{
 function test2()
 {
  echo "constructor on test2<br>";
 }

function machwas()
 {
  echo "test2 on work...<br>";
  include("prob02_c3.php");
  test3::machwas();
 }

}

?>
---------------------------------------------------

---------------------------------------------------
prob02_c3.php - Statische Klasse
---------------------------------------------------
<?php

class test3
{

function machwas()
 {
  echo "static function machwas at test3...<br>";
 }

}

?>
---------------------------------------------------

  1. Hallo Selfer,

    Mit freuntlichem Gruß vom SAPI CLI der Version 5.0.3 an der Konsole:

    eddi@eddi:~> eddi test

    constructor on test1
    test1 on work...
    static function machwas at test3...
    constructor on test2
    test2 on work...
    static function machwas at test3...

    Gruß aus Berlin!
    eddi

    1. Hallo Robbe,

      mein Fehler. Habe alles in eine Datei geschrieben und die Errormeldung der CLI habe ich auf ein Minimum herabgesetzt, es wurde nicht mal beim include auf eine fehlende Datei gemeckert. Tom hat also recht.

      Leider werden Methoden, die in Objekten schlummern nicht automatisch registriert, als daß man mit get_defined_functions() arbeiten könnte. Ausweg wäre nur in der Datei "prob02_c3.php" eine Variable zu definieren und im entsprechenden Objekt abzufragen.

      Gruß aus Berlin!
      eddi

  2. Moin,
    Dein Denkfehler ist folgender:
    Du brauchst eine einmal eingebunde Funktion nicht noch einmal zu includieren, sondern Du mußt nur den entsprechenden Funktionsaufruf in Deiner Funktion machen.

    Viele Grüße TomIRL

    1. Hallo Tom,

      Danke für dein Hinweis, du hast vollkommen recht. Ich ging nur davon aus das eine Klasse eben gar nix weiss vom Main-Programm weiss. Da das so doch nicht stümmt, nehme ich jetzt einfach mal so zur Kenntniss :).

      Schönen Sonntag noch,
      cya, Robbe.