Mitch en Kasper, wellicht misschien een overbodig commentaar, maar misschien wist je het niet:
Ik definieer een aantal variabelen buiten de class (zals Kasper idd opmerkt)...
Om deze variablen binnen de class (of binnen andere fucnties) te gebruiken, definieer je eerst de variable opnieuw door $GLOBAL $varName...
Nu heeft de $varName dus de waarde die ook buiten de functie / Class gedefinieerd is. Het heeft dus niets met de $GLOBALS['varname'] te maken....
(Variabelen zijn anders alleen bekend binnen de functie / class)...
Nog een puntje trouwens:
<?php
class whatever {
var $varname = 'iets';
}
?>
in php4 kun je variables niet op deze manier declareren, dit moet je in je constructor doen. Dus:
<?php
class whatever {
var $varname;
function whatever() {
$this->varname = 'iets';
}
}
?>
Ahh, op die manier....
Ik wist idd niet dat het ook op die manier kon, ik gebruikte daar dus altijd de andere manier voor: "$global $varName' $varName2"
Wat ik bedoelde met alleen bekend binnen class / functie is dit:
<?php
# Voorbeeldje
$naam = 'Mitch';
class zegnaam
{
function zegnaam()
{
echo $naam
}
}
$zegnaam = new zegnaam;
?>
Zal niets terug geven omdat $naam niet bekend is binnen de functie zegnaam...
Als je eerst dit doet:
<?php
# Voorbeeldje
$naam = 'Mitch';
class zegnaam
{
function zegnaam()
{
$GLOBALS $naam
echo $naam;
}
}
$zegnaam = new zegnaam;
?>
dan werkt het weer zoals jij verwachtte, en heeft $naam de waarde mitch...
Joh, nou dan zeur ik wel.... Laat maar zitten dan...
Wat betreft die variabelen die je niet kunt declareren in php4: dit betreft alleen niet-constanten... en ik gebruik zelden constanten op die manier... (Dat was misschien niet duidelijk) voor info, kijk gerust op php.net:
In PHP 4, only constant initializers for var variables are allowed. To initialize variables with non-constant values, you need an initialization function which is called automatically when an object is being constructed from the class. Such a function is called a constructor (see below).
Globale variabelen gebruiken is zeer dom in klasses en functies. De hele bedoeling achter klasses en functies is dat ze een op zichzelf staand stukje code worden dat je op een snelle en makkelijke manier in eender welke code kan inplakken.
Met het doorgeven van parameters kan je gewoon je functie aanroepen en de juiste waardes in de functiehoofding zetten.
Bij het gebruik van globalen ga je dus al eerst je mogelijke bestaande variabelen moeten globaal maken/renamen en ga je je vingers moeten kruisen dat je niet al ergens een variabele met die naam hebt of je hele script draait in het frut.
Moraal van het verhaal :
Hou zoveel mogelijk variabelen lokaal gedeclareerd om 'ambigious errors' of dubbelzinnigheid tegen te gaan.
@mary: Ik ben het geheel met je eens.
Ik wilde echter iets proberen, gewoon als PoC, en dat is gelukt...
Dat het onverstandig is, is duidelijk. Het ging alleen maar even om de theorie.
Maar deze hele discussie is ondertussen losgeslagen van de eigenlijke vraag..... :P