Visa signatur
Kom-pa-TI-bilitet
Ursäktar mig för den något tillkrånglade titeln, jag är osäker på hur jag kort kan beskriva mitt problem..
Sitter med ett ramverk/CMS (Concrete5 om någon är nyfiken) där jag håller på att tillverka en egen modul. Systemet bygger på ett MVC-liknande programmeringsmönster som för det mesta fungerar bra. I detta fall står jag dock frågande.
Som jag förstår saken så inkluderas min modul genom ett include-anrop från en omkringliggande systemklass. Modellvariabler ligger i en array som extractas i samband med att min fil inkluderas, och jag kan komma åt dessa variabler direkt från min inkluderade fil, men inte från nydefinierade funktioner i samma fil:
/* Följande fungerar: */
echo $name;
echo $address;
echo $phone;
/* Följande fungerar INTE */
function foo() {
global $name;
global $address;
global $phone;
echo $name;
echo $address;
echo $phone;
}
foo(); // null, null, null
För att kunna använda variablerna i min funktion måste jag skicka med dessa i funktionsanropet, vilket skulle leda till fem eller sex extraargument för varje anrop.
Jag har listat ut att jag antagligen kan slänga in variablerna i en array som jag ger som argument i min funktion, och på så vis komma undan med "bara" ett onödigt argument, men nu har det gått så långt att jag börjat funderar över varför det inte fungerar som jag tycker att det borde göra. Vad är det som gör att variablerna inte kan göras globala? Samma sak gäller nämligen om jag definierar nya variabler:
$localname = $name; // lokal definition av $name
echo $localname; // fungerar
function foo() {
global $localname;
echo $localname; // null
}
Tacksam för upplysning.
Kom-pa-TI-bilitet
Copyright © 1999–2023 Geeks AB. Allt innehåll tillhör Geeks AB.
Citering är tillåten om källan anges.