define()

Door Robin de Vries, 16 jaar geleden, 7.264x bekeken

Alles over de define functie

Gesponsorde koppelingen

Inhoudsopgave

  1. define gebruiken

 

Er zijn 24 reacties op 'Define'

PHP hulp
PHP hulp
0 seconden vanaf nu
 

Gesponsorde koppelingen
Hipska BE
Hipska BE
16 jaar geleden
 
0 +1 -0 -1
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
<?php

// 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 !!
Michael
michael
16 jaar geleden
 
0 +1 -0 -1
Kan je misschien iets meer uitleggen naar de voordelen hiervan?
Winston Smith
Winston Smith
16 jaar geleden
 
0 +1 -0 -1
Quote:
als je een string variabele hebt die niet verandert hoeft te worden in de pagina
Variabele is meer van toepassing denk ik, je kan immers ook een integer meegeven als waarde (denk dan aan define("NOT_FOUND", 404); bijvoorbeeld).

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.
Martijn B
Martijn B
16 jaar geleden
 
0 +1 -0 -1
Ik gebruik zelf heel veel constanten bijvoorbeeld voor tabel namen of belangrijke instellingen.
Frank -
Frank -
16 jaar geleden
 
0 +1 -0 -1
Quote:
als je een string hebt die niet verandert hoeft te worden in de pagina
En waarom is dat dan beter? Is het sneller?

Ik zou zeggen dat je constantes gebruikt voor zaken die niet mogen veranderen of niet kunnen veranderen. Hiermee verhoog je de veiligheid.
Robert Deiman
Robert Deiman
16 jaar geleden
 
0 +1 -0 -1
Ik heb de boel al even aangepast, zodat het nu wel geldig is. Hoe kan het eigenlijk he.. dat iemand zoiets simpels/ kleins, een functie van PHP nog fout in de lib zet :S
Bo az
Bo az
16 jaar geleden
 
0 +1 -0 -1
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.
Robert Deiman
Robert Deiman
16 jaar geleden
 
0 +1 -0 -1
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.

Edit:

De definitie van een constante is ook:
Constant is een begrip dat onveranderlijkheid uitdrukt. -> Waarde blijft dus altijd hetzelfde.
PHP erik
PHP erik
16 jaar geleden
 
0 +1 -0 -1
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.
Jelmer -
Jelmer -
16 jaar geleden
 
0 +1 -0 -1
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:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?php
define('PI', 3.14159265);
?>


En nog eentje, als voorbeeld van constanten als instellingen:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
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
?>
Martijn B
Martijn B
16 jaar geleden
 
0 +1 -0 -1
@Jelmer:

Bij mijn weten heb je het helemaal goed.

En de naam geving van een constante is ook erg belangrijk.
Alle constanten die ik aanmaak voor mijn webwinkel beginnen met "SHOP_".

Je hebt dan bijvoorbeeld:
SHOP_DEBUG
SHOP_TP_PRODUCTS
SHOP_TP_OPTIONS

TP = Tabel van de groep Producten.
Robert Deiman
Robert Deiman
16 jaar geleden
 
0 +1 -0 -1
@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.
Jelmer -
Jelmer -
16 jaar geleden
 
0 +1 -0 -1
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.
Justim
Justim
16 jaar geleden
 
0 +1 -0 -1
Quote:
misschien een mooi voorbeeld van het nut van een constante:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
    
<?php
define('PI', 3.14159265);
?>


voorbeeldje is een beetje overbodig, kun je beter als voorbeeld de error_reporting constanten gebruiken
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?php
echo M_PI;
?>
Kwastie
Kwastie
16 jaar geleden
 
0 +1 -0 -1
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.
Robert Deiman
Robert Deiman
16 jaar geleden
 
0 +1 -0 -1
@Kwastie

Zet je je connectiewaarden voor je db in een constante (gewoon in een config.php) dan kan je daar binnen een functie altijd bijkomen. 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.
Frank -
Frank -
16 jaar geleden
 
0 +1 -0 -1
@Robert:
Quote:
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.
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.

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.
Robert Deiman
Robert Deiman
16 jaar geleden
 
0 +1 -0 -1
@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.
Aaa Trump
aaa Trump
16 jaar geleden
 
0 +1 -0 -1
What the hell is het nut van deze functie? Je kan toch ook gewoon, een variable gebruiken?
Marco Fijn
Marco Fijn
15 jaar geleden
 
0 +1 -0 -1
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

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
<?php
   require('includes/' . $_GET['language'] . '.php');
   echo WELCOME_MESSAGE;
?>


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.
Frank -
Frank -
15 jaar geleden
 
0 +1 -0 -1
Quote:
Hoef je niet al je teksten in een DB te zetten, en kan je toch met meerdere talen werken.
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!

define() ga je niet gebruiken voor een meertalige website, dat is een ramp.
Jelmer -
Jelmer -
15 jaar geleden
 
0 +1 -0 -1
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.
Frank -
Frank -
15 jaar geleden
 
0 +1 -0 -1
@Jelmer: Helemaal mee eens. Het ging mij ook meer om de rare toepassing van define() dan promotie van het gebruik van een database. Is niet helemaal goed uit de verf gekomen. ;)
PHP hulp
PHP hulp
0 seconden vanaf nu
 

Gesponsorde koppelingen
Jason de Ridder
Jason de Ridder
15 jaar geleden
 
0 +1 -0 -1
Ik zou het voorbeeld ook anders 'defineren'. Er is zelfs een functie/constante van PI.

Je zou bijvoorbeeld de root-path van je website erin zetten.
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?php
define('BASEDIR', realpath(dirname(__FILE__)."/"));
?>

Om te reageren heb je een account nodig en je moet ingelogd zijn.

Inhoudsopgave

  1. define gebruiken

Labels

  • Geen tags toegevoegd.

PHP tutorial opties

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.