Professor Hase: Kann man PHP Header Angabe und Namespace Festlegung includen?

Beitrag lesen

Hallo Rolf!

Ich weiß jetzt, wo mein Denkfehler war und wieso ich deshalb alles falsch interpretiert hatte! Meine Ausgangs-Situation war:

file2.inc:

<?php

Namespace Foo

Class Bar
  {
    ...
  }

$irgendwas = New Bar;

?>

seite.php:

<?php

require_once(file2.inc);

$test = $irgendwas -> methode_xyz();

?>

Da bringt $test ein Ergebnis. Klar! Die Instanz $irgendwas wurde ja in file2.inc gebildet, also im Foo Namensraum. Das hatte ich nicht bedacht und deshalb fälschlicherweise den Eindruck, es funktioniert auch ohne eine Namensraum Angabe in seite.php. Den Denkfehler sehe ich jetzt auch auf 2 weitere Arten: Im PHP Manual habe ich die Konstante NAMESPACE gefunden. Die ergibt auf file2.inc 'Foo', auf Seite seite.php ist sie inhaltslos. Klar, weil eben kein Namensraum vorhanden ist. Selbst, wenn der im includeten Skript da ist. Und der 2. Beweis für meinen Trugschluss ist, dass eine weitere Klasse, die erstmalig in seite.php aufgerufen wird, selbst aber auch eine Namespace Angabe hat, zu einem Fehler führt. Die Klasse wird nicht gefunden.

Conclusio: Die Angabe von Namespace muss explizit auf der Seite erfolgen, auf der der Namensraum gelten soll. Wird eine andere Datei mit Namensraum includet, dann wird dieser nicht (!!) automatisch übernommen, während die Angabe

header('content-type:text/html; charset=UTF-8');

in file2.inc stehen kann und dann auch für seite.php gilt. Vorausgesetzt natürlich, dass es bis zu dieser Zeile weder in file2.inc, noch in seite.php eine Ausgabe Richtung Client gegeben hat.

Danke für Deine Hilfe! Somit ist meine diesbezügliche Frage beantwortet!

Professor Hase

PS: Bzgl. der anderen Sache mit den strict_types hat mir Dedlfix schon geantwortet, wie ich gerade sehe. Damit werde ich mich jetzt seperat beschäftigen.