PHP, Basis(-Klasse?) oder 'global scope Klasse'

OP (Firma: tsx89) Persönliche Seite #7600605
Lesenswert?
• ▲
▼

PHP bietet ja die Möglichkeit, ganz Stur und Dumm (Typenlos und prozedural) einfach drauf los zu Schreiben, und ziemlich schnell (auch wenn es Murks ist) zum Ziel zu kommen: Also ganz ohne Klassen. Das wird gleich funktionieren, ohne dass zuerst eine 'main'-Funktion, oder eine Basisklasse mit Konstruktor etc. vorhanden sein muss.

Aber wo steht das dann 'drinnen'? Bzw. wie kann man diesen "global Über-Scope / Top-Namespace" in Klassen ansprechen? Gibt es dafür ein Objekt? self::class und $this funktioniert ja nur innerhalb einer Klasse. ---> Cannot use "self" in the global scope.

Es geht darum dass eine Funktion, die als Parameter eine Klasse (Objekt) sehen will, auch vom 'global scope' aufgerufen werden kann, und in dem Fall dieser 'global scope' mit übergeben wird. Ich will praktisch "Global-Parent" übergeben. (Beim frühen Initialisieren von Debugger usw. Wo es zu dem Zeitpunkt noch keine Instanz einer Klasse gibt, VON der das laufen könnte.)

Ich habe in der Doku gesucht, etwas Gegoogelt, und diverse var_dumps() gemacht, aber finde das Objekt nicht. Vielleicht weiß jemand was gemeint ist. Geht das überhaupt?

Gruß, tsx

Gast #7600613
Lesenswert?
• ▲
▼

Tim S. schrieb:

Aber wo steht das dann 'drinnen'?

Dort (Datei) wo du es reinschreibst, ausserhalb jeglicher Klassen und namespacedefs also wie früher ohne OO.

Bzw. wie kann man diesen "global Über-Scope / Top-Namespace" in Klassen ansprechen?

Indem du die Datei von oben vorher importierst. global ist praktisch der "leere Raum" wo alles anfängt.

Gibt es dafür ein Objekt? self::class und $this funktioniert ja nur innerhalb einer Klasse. ---> Cannot use "self" in the global scope.

Wenn du es in eine Klasse packen willst gibts du dieser vorher einen Namen, üblicherweise wählt man auch gleich einen Namespace. Im Prinzip kannst du auch nur einen namespace verwenden. Ist dann so als hättest du defines mit einem Prefix.

Wo es zu dem Zeitpunkt noch keine Instanz einer Klasse gibt, VON der das laufen könnte.)

Das was du oben festgelegt hast musst du vorher auch importieren sonst wird es nicht gefunden. Die Klasse oben kannst du dann übergeben. Je nachdem was du da machst ist die Klasse static oder es existiert ein Objekt davon,...

Ich habe in der Doku gesucht, etwas Gegoogelt, und diverse var_dumps() gemacht, aber finde das Objekt nicht. Vielleicht weiß jemand was gemeint ist. Geht das überhaupt?

Das Objekt legst du selber fest das ist damit gemeint. Global Space ist alles ausserhalb von irgendwas, praktisch der "leere Raum" wo du beginnst. Vielleicht ist das in der aktuellen PHP-Version anders und es existiert inzw. sowas wie ein default globales Object glaube ich aber eher nicht wenn dann vielleicht innerhalb von manchen Frameworks aber die nutzen eher eigene namespaces wo dann deren "globals" leben.

Zugriff auf globale Objekte von gewissen Kontexten (innerhalb Klasse/Object/namespace) heraus nimmt man "global $foo" oder "$GLOBALS['foo']". Das Object das du von dort nutzen willst muss nat. vorher schon existieren.

Erzeugen von Objekten aus anderen Kontexten heraus in den global space geht vermutlich nicht, müsste man ausprobieren, ich vermute mal die def ausserhalb muss vermutlich schon vorher vorhanden sein, so Art leeres Object.

OP (Firma: tsx89) Persönliche Seite #7600781
Lesenswert?
• ▲
▼

Joa alles klar. Danke für die Hinweise und Infos.

Franko S. schrieb:

Global Space ist alles ausserhalb von irgendwas, praktisch der "leere Raum" wo du beginnst.

--> Da bleibt nur noch "null", anstelle einer Klasse oder Type, zum übergeben. Es muss dann "eigen behandelt" werden, was ich mir sparen wollte. Wegen erst auf null Prüfen, etc. ... Danke soweit!

Gast #7600818
Lesenswert?
• ▲
▼

Tim S. schrieb:

--> Da bleibt nur noch "null", anstelle einer Klasse oder Type, zum übergeben. Es muss dann "eigen behandelt" werden, was ich mir sparen wollte. Wegen erst auf null Prüfen, etc. ... Danke soweit!

Bei den namespaces gibts auch global, wenn man den Bezeichner weglässt:

namespace { //deklarationen } Da liegt dann alles in global (bei ns bezieht sich das immer auf const, Klassen und Funktionen).

Den jeweiligen namespace kannst du mit NAMESPACE erfragen, vielleicht hilft dir das weiter.

Lies dir mal https://www.php.net/manual/en/language.namespaces.php durch da steht das alles erklärt auch die Kommentare wo sich manches anders verhält als man es vermutet.

Antwort schreiben

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.