nested classes
am 06.09.2006 22:38:17 von Thomas Grabietz
Hallo Alle,
was übersehe ich hier:
file: Inner.php
class Inner
{
function Inner(){}
}
?>
file: Outer.php
class Outer
{
function willWork()
{
include("Inner.php");//wird akzeptiert
}
function willNotWork()
{
class AnotherInner
{
function AnotherInner(){}//bricht mit Error ab.
}
}
}
?>
php Manual:
Steht include im aufrufenden Skript innerhalb einer Funktion, verhält sich
der gesamte Code der aufgerufenen Datei genau so, als ob Sie diesen Code
innerhalb dieser Funktion definiert hätten.
Wieso geht Beispiel Inner, AnotherInner aber nicht???
Fragend Tom
Re: nested classes
am 06.09.2006 23:29:47 von Frank Schenk
Thomas Grabietz schrieb:
....nested classes...
> Wieso geht Beispiel Inner, AnotherInner aber nicht???
Definiere geht?
Siehe http://bugs.php.net/bug.php?id=21871&edit=1 - man beachte den
letzten Satz:
[19 Apr 2003 4:14pm UTC] helly@php.net
....
No more support for nested classes.
gegoogelt habend, Frank
Re: nested classes
am 07.09.2006 10:12:52 von Thomas Grabietz
Hallo Frank,
danke für die Antwort. Ich verstehe Sie leider nicht.
Wenn die Aussage, dass include() den tatsächlichen Code ersetzt stimmt,
müsste der Interpreter in meinem Codebeispiel auch im ersten Fall eine
verschachtelte Klassendefinition interpretieren(denn class Inner wird erst
in der Funktion willWork() geladen).
Die Tatsache, dass der Interpreter es trotzdem tut, lässt mich schlieÃen,
dass er intern das includen der Klasse anders verarbeitet. Nur wie?
Fragend Tom
Re: nested classes
am 07.09.2006 19:52:13 von Frank Schenk
Thomas Grabietz schrieb:
> Hallo Frank,
> danke für die Antwort. Ich verstehe Sie leider nicht.
>
> Wenn die Aussage, dass include() den tatsächlichen Code ersetzt stimmt,
> müsste der Interpreter in meinem Codebeispiel auch im ersten Fall eine
> verschachtelte Klassendefinition interpretieren(denn class Inner wird erst
> in der Funktion willWork() geladen).
> Die Tatsache, dass der Interpreter es trotzdem tut, lässt mich schlieÃen,
> dass er intern das includen der Klasse anders verarbeitet. Nur wie?
>
> Fragend Tom
Was verstehst du an
"No more support for nested classes."
nicht?
Frank
Re: nested classes
am 08.09.2006 22:55:24 von Thomas Grabietz
Frank Schenk wrote:
> Thomas Grabietz schrieb:
>> Hallo Frank,
>> danke für die Antwort. Ich verstehe Sie leider nicht.
>>
>> Wenn die Aussage, dass include() den tatsächlichen Code ersetzt stimmt,
>> müsste der Interpreter in meinem Codebeispiel auch im ersten Fall eine
>> verschachtelte Klassendefinition interpretieren(denn class Inner wird
>> erst in der Funktion willWork() geladen).
>> Die Tatsache, dass der Interpreter es trotzdem tut, lässt mich schlieÃen,
>> dass er intern das includen der Klasse anders verarbeitet. Nur wie?
>>
>> Fragend Tom
>
> Was verstehst du an
>
> "No more support for nested classes."
>
> nicht?
>
Ich verstehe den Satz sehr wohl, aber er ist keine Antwort auf meine Frage.
Meine includierte Klasse ist nach oben beschriebener Aussage eine "nested
class". Sie funktioniert sehr wohl! Warum aktzepiert der Interpreter das,
obwohl es ja, wie von Dir ja richtig keinen Support für "nested classes"
gibt. Wie verarbeitet der Interpreter also die eingebettete
Klassendefinition?
Mich wiederholdend
Tom
Re: nested classes
am 09.09.2006 20:31:48 von Frank Schenk
Thomas Grabietz schrieb:
> Meine includierte Klasse ist nach oben beschriebener Aussage eine "nested
> class". Sie funktioniert sehr wohl! Warum aktzepiert der Interpreter das,
> obwohl es ja, wie von Dir ja richtig keinen Support für "nested classes"
> gibt. Wie verarbeitet der Interpreter also die eingebettete
> Klassendefinition?
Bitte definiere "funktioniert". Darum bat ich dich schon einmal. HeiÃt
das, es gibt keine Fehlermeldung oder heiÃt das, du kannst eine Instanz
ableiten und Methoden aufrufen?
Danke fürs lesen...,
Frank
Re: nested classes
am 09.09.2006 22:32:02 von Thomas Grabietz
Frank Schenk wrote:
> Thomas Grabietz schrieb:
>> Meine includierte Klasse ist nach oben beschriebener Aussage eine "nested
>> class". Sie funktioniert sehr wohl! Warum aktzepiert der Interpreter das,
>> obwohl es ja, wie von Dir ja richtig keinen Support für "nested classes"
>> gibt. Wie verarbeitet der Interpreter also die eingebettete
>> Klassendefinition?
>
> Bitte definiere "funktioniert". Darum bat ich dich schon einmal.
In "definiere geht?" habe ich unter Umständen die höfliche Bitte, den
Sachverhalt näher zu beschreibe wohl übersehen.
Ersteinmal akzeptiert der Interpreter die Definition, also weite ich den
Programmcode mal aus:
file: inner.php
class Inner
{
function Inner()
{
print "Hallo ich bin ein Inner Objekt
";
}
function myDo()
{
print "Ich bin eine Funktion in Inner
";
}
}
?>
class Outer
{
function Outer()
{}
function nestedClass()
{
include("inner.php");
$inner=new Inner();
$inner->myDo();
}
}
$outer=new Outer();
$outer->nestedClass();//Hallo ich bin ein Inner Objekt
//Ich bin eine Funktion in Inner
$inner=new Inner();//Hallo ich bin ein Inner Objekt
$inner->myDo();//Ich bin eine Funktion in Inner
?>
http://de2.php.net/manual/de/function.include.php
Steht include im aufrufenden Skript innerhalb einer Funktion, verhält sich
der gesamte Code der aufgerufenen Datei genau so, als ob Sie diesen Code
innerhalb dieser Funktion definiert hätten. Aus diesem Grund hat dieser
Code den Geltungsbereich der Variablen dieser Funktion.
Vermutung: Dieser Satz stimmt nicht! Da die Klasse Inner auserhalb der
Funktion instanzierbar ist.
Sollte die Vermutung falsch sein hieÃe das: Doch Support für für nested
classes.
Frage: Was ist nun richtig?
In Hoffnung mich jetzt verständlich ausgedrückt zu haben
Tom