define()
Door Robin de Vries, 21 jaar geleden, 10.157x bekeken
Alles over de define functie
Gesponsorde koppelingen
Inhoudsopgave
Er zijn 24 reacties op 'Define'
Gesponsorde koppelingen
Code (php)
1
2
3
4
5
6
2
3
4
5
6
<?php
// ik heb altijd geweten dat het zo moest hoor:
define("SITENAAM","phphulp.nl");
?>
// ik heb altijd geweten dat het zo moest hoor:
define("SITENAAM","phphulp.nl");
?>
Strings hoor je nog altijd tussen enkele of dubbele quotes te zetten !!
Quote:
Variabele is meer van toepassing denk ik, je kan immers ook een integer meegeven als waarde (denk dan aan define("NOT_FOUND", 404); bijvoorbeeld).als je een string variabele hebt die niet verandert hoeft te worden in de pagina
Verder denk ik dat in je eerste voorbeeld, echo sitename, je een error zou moeten krijgen? Iets met use of undefined constant, assumed...?
Edit:
@Michael: volgens mij zijn d? voordelen hiervan a) duidelijkheid; NOT_FOUND in een code zegt meer dan 404, en b) je voorkomt dat een variabele per ongeluk gewijzigd kan worden.
Constanten zijn er om zogenaamde 'magic numbers' te voorkomen. Dus met name voor getallen.
Als je zomaar een 2 in een stukje code ziet staan heb je geen idee waarvan die is, door gebruik te maken van DEFINE kan je er een label aanhangen die de betekenis verduidelijkt.
Je ziet dit op heel veel plaatsen terug bijvoorbeeld bij: error_reporting.
Als je zomaar een 2 in een stukje code ziet staan heb je geen idee waarvan die is, door gebruik te maken van DEFINE kan je er een label aanhangen die de betekenis verduidelijkt.
Je ziet dit op heel veel plaatsen terug bijvoorbeeld bij: error_reporting.
Constanten zijn er om (de naam zegt het eigenlijk al) constante dus vaste waarden in te bewaren. Een constante is niet meer aanpasbaar, dus veilig te gebruiken zoals Martijn! al als voorbeeld gaf, om kolomnamen van je tabellen en database in te zetten.
Een nummer gewoon los komt (bij mij iig) bijna niet voor, en de meeste dingen die ik maak zijn met de variabelen aanpasbaar (bijvoorbeeld een max_aantal staat in een var, met duidelijke naam)
Het ligt heel erg aan je programmeerstijl wanneer je ze zou gebruiken.
Een nummer gewoon los komt (bij mij iig) bijna niet voor, en de meeste dingen die ik maak zijn met de variabelen aanpasbaar (bijvoorbeeld een max_aantal staat in een var, met duidelijke naam)
Het ligt heel erg aan je programmeerstijl wanneer je ze zou gebruiken.
Edit:
De definitie van een constante is ook:
Constant is een begrip dat onveranderlijkheid uitdrukt. -> Waarde blijft dus altijd hetzelfde.
De definitie van een constante is ook:
Constant is een begrip dat onveranderlijkheid uitdrukt. -> Waarde blijft dus altijd hetzelfde.
Nummers (integers) komen juist wel vrij veel voor in constantes. Denk aan dingen als errorcodes. Daarnaast denk ik niet dat het met programmeerstijl te maken heeft maar meer met logica.
Advies aan iedereen: kijk ook eens naar bestaande systemen die constantes gebruiken en waarom ze daar een constante gebruiken. Kijk eens naar PDO bijvoorbeeld.
Advies aan iedereen: kijk ook eens naar bestaande systemen die constantes gebruiken en waarom ze daar een constante gebruiken. Kijk eens naar PDO bijvoorbeeld.
Misschien ook even het vermelden waard: Bij mijn weten kan je alleen primitive types - dus integers, scalars, strings, boolean waarden - als waarde van een constante defini?ren. Objecten, resources en arrays willen niet.
edit: misschien een mooi voorbeeld van het nut van een constante:
En nog eentje, als voorbeeld van constanten als instellingen:
edit: misschien een mooi voorbeeld van het nut van een constante:
En nog eentje, als voorbeeld van constanten als instellingen:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<?php
define('OPTIE_A', 1);
define('OPTIE_B', 2);
define('OPTIE_C', 4);
define('OPTIE_ALL', 7);
function p($opties)
{
if($opties & OPTIE_A) echo 'A';
if($opties & OPTIE_B) echo 'B';
if($opties & OPTIE_C) echo 'C';
echo PHP_EOL;
}
p(OPTIE_A + OPTIE_B); // geeft AB
p(OPTIE_ALL ^ OPTIE_C); // geeft AB
p(OPTIE_ALL ^ (OPTIE_A + OPTIE_C)); // geeft B
?>
define('OPTIE_A', 1);
define('OPTIE_B', 2);
define('OPTIE_C', 4);
define('OPTIE_ALL', 7);
function p($opties)
{
if($opties & OPTIE_A) echo 'A';
if($opties & OPTIE_B) echo 'B';
if($opties & OPTIE_C) echo 'C';
echo PHP_EOL;
}
p(OPTIE_A + OPTIE_B); // geeft AB
p(OPTIE_ALL ^ OPTIE_C); // geeft AB
p(OPTIE_ALL ^ (OPTIE_A + OPTIE_C)); // geeft B
?>
@Erik
Ik zei ook dat losse nummers bij mij bijna niet voorkomt, omdat ik daar vaak wel een variabele (of dus in het geval van error_codes, omdat die nooit veranderen) voor gebruik. Dat is gemakkelijker terugzoeken, omdat ik meestal eerst alle variabelen declareer. -> Zo blijven systemen eenvoudig aanpasbaar.
Maar nogmaals, voor error_codes gebruik je wel altijd constanten. Die veranderen nooit.
Ik zei ook dat losse nummers bij mij bijna niet voorkomt, omdat ik daar vaak wel een variabele (of dus in het geval van error_codes, omdat die nooit veranderen) voor gebruik. Dat is gemakkelijker terugzoeken, omdat ik meestal eerst alle variabelen declareer. -> Zo blijven systemen eenvoudig aanpasbaar.
Maar nogmaals, voor error_codes gebruik je wel altijd constanten. Die veranderen nooit.
Je kan ook constanten gebruiken omdat ze juist veranderen. Stel dat ik in mijn voorbeeldje nog een optie_AenEenHalf wou hebben, en die wou ik het om wat voor reden dan ook nummertje 2 geven, dan moet ik OPTIE_B, OPTIE_C en OPTIE_ALL ook een andere waarde geven. Had ik nu overal de nummertjes gebruikt, dan zou ik mijn hele script moeten aanpassen. Gebruik in constanten, dan hoef je alleen de definities aan te passen.
define is standaard 'false' dus je hoeft het er niet bij te zetten.
Maar wat zijn de 'echte' voordelen van Constante ten opzichte van een Variable, de constante kun je niet veranderen. Maar waarom zou iemand in een script een variable willen veranderen, waarvan ik zelf weet dat Ik kan (nog) geen goede reden verzinnen waarom ik vanaf nu DEFINE ga gebruik ipv variabelen.
Maar wat zijn de 'echte' voordelen van Constante ten opzichte van een Variable, de constante kun je niet veranderen. Maar waarom zou iemand in een script een variable willen veranderen, waarvan ik zelf weet dat Ik kan (nog) geen goede reden verzinnen waarom ik vanaf nu DEFINE ga gebruik ipv variabelen.
@Robert:
En laat documentatie nu net het zwakste punt van alle software zijn...
Nee, alles wat van buiten in een functie nodig is, gaat via de parameters. Geen gekloot met globals of constantes. DEBUG uitgezonderd, die is z? generiek dat dit geen problemen oplevert.
Quote:
En dat vind ik dus direct het nadeel! De constante gebruik je blijkbaar voor diverse zaken, anders zet je wel een variabele binnen een functie, maar een aanpassing van je script (andere waarde voor de constante) kan onverwachte gedrag van een functie tot gevolg hebben. Je zult wel verdraaid goed moeten documenteren waar de constatante wordt gebruikt en wat je speelruimte is.Geen gedoe met "global" of toevoegen aan je functieaanroep, om ze ook binnen de functie te krijgen.
Dat vind ik zelf het voordeel van een constante.
Dat vind ik zelf het voordeel van een constante.
En laat documentatie nu net het zwakste punt van alle software zijn...
Nee, alles wat van buiten in een functie nodig is, gaat via de parameters. Geen gekloot met globals of constantes. DEBUG uitgezonderd, die is z? generiek dat dit geen problemen oplevert.
@pgFrank
Daarom geef ik ook aan dat je bijvoorbeeld de database connector in een constante zet. -> Ik programmeer nog geen oop, maar gebruik wel veel functies, Bijvoorbeeld een functie voor het openen en een functie het sluiten van de dbverbinding.
Om toch gemakkelijk een soort van "config.inc.php" file te gebruiken definieer ik daarin de constanten voor de databaseverbinding.
Die veranderen nooit zolang je bij de zelfde hoster enzo blijft. Dus het veranderen daarvan is niet nodig.
De constante gebruik ik dus niet voor verschillende zaken, maar ook omdat ik het onnodig vind om wanneer ik de db verbinding opzet (de functie: dbconnect()) elke keer de variabelen mee te moeten geven. Daarom gebruik ik daarvoor constanten. Verder gebruik ik ze eigenlijk sporadisch.
Daarom geef ik ook aan dat je bijvoorbeeld de database connector in een constante zet. -> Ik programmeer nog geen oop, maar gebruik wel veel functies, Bijvoorbeeld een functie voor het openen en een functie het sluiten van de dbverbinding.
Om toch gemakkelijk een soort van "config.inc.php" file te gebruiken definieer ik daarin de constanten voor de databaseverbinding.
Die veranderen nooit zolang je bij de zelfde hoster enzo blijft. Dus het veranderen daarvan is niet nodig.
De constante gebruik ik dus niet voor verschillende zaken, maar ook omdat ik het onnodig vind om wanneer ik de db verbinding opzet (de functie: dbconnect()) elke keer de variabelen mee te moeten geven. Daarom gebruik ik daarvoor constanten. Verder gebruik ik ze eigenlijk sporadisch.
Een groot voordeel van de define() ten minste, waarvoor ik het wel eens gebruikt heb.
stel, je hebt een website/webshop of iets dergelijks die beschikbaar moet zijn voor mensen in zowel nederlands als in het engels.
Nadat iemand dan zijn taal heeft gekozen laad je gewoon je site dus en include je het bestand van de juiste taal. bv require('includes/dutch.php');
Dan kan je gewoon op je website neer zetten
op deze manier zou je de define kunnen gebruiken. Hoef je niet al je teksten in een DB te zetten, en kan je toch met meerdere talen werken.
P.S. dit kan ook wel geregeld worden d.m.v. Variabelen, maar stel dat je $welcome als welkom bericht gebruikt, en in je script een variabele $welcome gebruikt voor een andere reden.
Dan heb je dus kans dat wat een welcome berichtje moet zijn iets anders wordt.
stel, je hebt een website/webshop of iets dergelijks die beschikbaar moet zijn voor mensen in zowel nederlands als in het engels.
Nadat iemand dan zijn taal heeft gekozen laad je gewoon je site dus en include je het bestand van de juiste taal. bv require('includes/dutch.php');
Dan kan je gewoon op je website neer zetten
op deze manier zou je de define kunnen gebruiken. Hoef je niet al je teksten in een DB te zetten, en kan je toch met meerdere talen werken.
P.S. dit kan ook wel geregeld worden d.m.v. Variabelen, maar stel dat je $welcome als welkom bericht gebruikt, en in je script een variabele $welcome gebruikt voor een andere reden.
Dan heb je dus kans dat wat een welcome berichtje moet zijn iets anders wordt.
Quote:
En wat is daar dan het voordeel van? Het gebrek aan flexibiliteit, niet te debuggen en niet te onderhouden? Het is maar waar je zin in hebt... Met een database wordt het veel eenvoudiger om even een nieuwe taal toe te voegen, zelfs het aanbieden van een alternatief wanneer de vertaling nog ontbreekt, is in een oogwenk geregeld. Dat gaat je niet lukken met hardcoded ellende!Hoef je niet al je teksten in een DB te zetten, en kan je toch met meerdere talen werken.
define() ga je niet gebruiken voor een meertalige website, dat is een ramp.
Ik ben het niet met je stelling dat zonder database je geen meertalige website kan maken, en ook niet met je stelling dat het met de database allemaal veel makkelijker gaat maar het is inderdaad zo dat wanneer je een website meertalig maakt met define() je niet handig bezig bent.
Waarom niet? Omdat je niet 2 vertalingen in kan laden (een voor de gebruiker, en een voor wanneer er een vertaling mist, cron-jobs die mailtjes in verschillende talen versturen) en omdat het lastiger is missende vertalingen terug te vinden. PHP zal de constante gewoon als string aanzien - alhoewel dat misschien ook niet een bad thing is. Staat er tenminste iets in plaats van dat je hele website stopt met een syntax error. Maar dan nog zou ik voor dit soort dynamische dingen een functie gebruiken. Dat is veel flexibeler.
define dient meer om waarden die op zichzelf geen betekenis hebben, bijvoorbeeld het nummertje 404 in je code NOT_FOUND te noemen. Zo wordt je code beter leesbaar en beter begrijpbaar.
Waarom niet? Omdat je niet 2 vertalingen in kan laden (een voor de gebruiker, en een voor wanneer er een vertaling mist, cron-jobs die mailtjes in verschillende talen versturen) en omdat het lastiger is missende vertalingen terug te vinden. PHP zal de constante gewoon als string aanzien - alhoewel dat misschien ook niet een bad thing is. Staat er tenminste iets in plaats van dat je hele website stopt met een syntax error. Maar dan nog zou ik voor dit soort dynamische dingen een functie gebruiken. Dat is veel flexibeler.
define dient meer om waarden die op zichzelf geen betekenis hebben, bijvoorbeeld het nummertje 404 in je code NOT_FOUND te noemen. Zo wordt je code beter leesbaar en beter begrijpbaar.
Om te reageren heb je een account nodig en je moet ingelogd zijn.
Inhoudsopgave
Labels
- Geen tags toegevoegd.
PHP hulp
0 seconden vanaf nu