Antwort an „Der Martin“ verfassen

Hallo,

Hast du denn auch daran gedacht, sie mit dem Schlüsselwort global in die Funktion(en) zu importieren?

habe ich bisher nicht versucht

schade, denn das ist notwendig, um aus einer Funktion heraus auf globale Variablen zugreifen zu können.

da hier einem davon abgeraten wird, wenn ich das richtig verstehe: Seit PHP 8.1.0 wird der Schreibzugriff auf das gesamte $GLOBALS-Array nicht mehr unterstützt.

Möglicherweise hast du das missverstanden. Erstens geht es tatsächlich nur um das Schreiben auf $_GLOBALS, zweitens ist der direkte Zugriff auf $_GLOBALS ja etwas "unbequem", und wenn man schon globale Variablen verwenden möchte, finde ich das explizite Bekanntmachen innerhalb der Funktion mit dem global-Keyword sauberer. Dann darfst du auch schreibend darauf zugreifen (auch wenn das bei mir immer ein bisschen Zähneknirschen hervorruft).

Aber Schreibzugriff brauchst du ja in deinem Fall auch gar nicht.

Aber Funktionen, die auf globale Variablen zugreifen, sind sowieso unschön. Wie wär's, wenn du $current im globalen Scope definierst und als Parameter an die Funktionen übergibst, die diesen Wert brauchen? Dann wäre nur im globalen Scope, der ja sowieso alles zusammenklebt, ein bisschen "Magic", aber alle Funktionen wären autark.

Also, übergeben würde ich den Paramter dann so, oder?

<?php

function game($current) { ?>

	<a class="<?= $current === null || $current === 'game' ? 'current' : ''; ?>" href="game">Spiel</a>

<?php }

Genau. Und beim Aufruf der Funktion game() dann auch den Wert übergeben.

Aber wo ist denn dieser global scope?

Das ist sozusagen alles, was sich außerhalb aller Funktionen und Klassen abspielt.

Ich bin noch nicht wirklich sehr vertraut mit PHP. In JavaScript wäre er ja außerhalb aller functions, aber bei PHP habe ich keine Ahnung.

Das ist in PHP ganz genauso. Der Unterschied ist, dass eine Funktion in Javascript auf globale Daten zugreifen darf, ohne dass man das extra regeln müssten; in PHP muss man es explizit erlauben.

Einen schönen Tag noch
 Martin

--
Мир для України.
freiwillig, öffentlich sichtbar
freiwillig, öffentlich sichtbar
freiwillig, öffentlich sichtbar

Ihre Identität in einem Cookie zu speichern erlaubt es Ihnen, Ihre Beiträge zu editieren. Außerdem müssen Sie dann bei neuen Beiträgen nicht mehr die Felder Name, E-Mail und Homepage ausfüllen.

abbrechen