[php] Here doc met defines

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • erkje
  • Registratie: Oktober 2001
  • Laatst online: 12-06-2024
Ik ben bezig met een here doc string en heb totnogtoe niet kunnen vinden of je een define kunt gebruiken binnen de string. Verder kun je alle soorten variabelen gebruiken, al dan niet met accollades, maar over een define lees ik niets.

Ik definieer een constante, en probeer vervolgens deze te stoppen in een here doc string:
PHP:
1
2
3
4
5
6
7
define('NEWVAR','blaat');

$str_bla = <<< EOS
Dit is mijn here doc string
Hier probeer ik de variabele: NEWVAR
Of misschien zo: {NEWVAR}
EOS;

Mijn output:
code:
1
2
3
Dit is mijn here doc string
Hier probeer ik de variabele: NEWVAR
Of misschien zo: {NEWVAR}

Dit is natuurlijk niet wat ik graag wil, ik verwacht natuurlijk 'blaat' in plaats van 'NEWVAR'. Heeft iemand een idee hoe dit wél kan? Of kan het gewoon níet?

taste and see that the Lord is good


Acties:
  • 0 Henk 'm!

  • kvdveer
  • Registratie: November 2000
  • Laatst online: 07-11-2023

kvdveer

Z.O.Z.

Nopes - defines worden niet automagisch vervangen... Het zijn geen C-macro's, het zijn geen variabelen, het zijn, tja, defines. Een van de wat zinlozere constructies in PHP. Je kunt ze alleen gebruiken om constanten van bepaalde types (string, int, float, bool) te maken.

Localhost, sweet localhost


Acties:
  • 0 Henk 'm!

  • _Sunnyboy_
  • Registratie: Januari 2003
  • Laatst online: 19-09 14:58

_Sunnyboy_

Mooooooooooooooooo!

Lijkt me niet echt zinloos hoor. Het zijn gewoon constanten, en die kunnen best nuttig zijn.

Build a man a fire, and he'll be warm for a day. Set a man on fire, and he'll be warm for the rest of his life


Acties:
  • 0 Henk 'm!

  • erkje
  • Registratie: Oktober 2001
  • Laatst online: 12-06-2024
Wij gebruiken ze om een website multilanguage te maken. Zo'n define gebruik je dan in de code, terwijl je voor elke taal een bestand hebt met defines. Naargelang de browser of de keuze van de gebruiker wordt een ander taalbestand geladen. Werkt perfect hoor. Nix zinloos.

taste and see that the Lord is good


Acties:
  • 0 Henk 'm!

  • Soultaker
  • Registratie: September 2000
  • Laatst online: 20-09 18:51
Maar kun je nu echt wat met defines wat je niet ook met globale variabelen kunt? Naar mijn mening echt niet. Ze maken de boel alleen maar ingewikkelder, door een nieuw soort waarde te introduceren. Als je wat complexere dingen wil definiëren, zul je toch vaak over moeten schakelen naar globale variabelen.

Acties:
  • 0 Henk 'm!

  • Erkens
  • Registratie: December 2001
  • Niet online

Erkens

Fotograaf

Soultaker schreef op 29 oktober 2004 @ 09:21:
Maar kun je nu echt wat met defines wat je niet ook met globale variabelen kunt? Naar mijn mening echt niet. Ze maken de boel alleen maar ingewikkelder, door een nieuw soort waarde te introduceren. Als je wat complexere dingen wil definiëren, zul je toch vaak over moeten schakelen naar globale variabelen.
globale variabelen wil je voorkomen, defines zijn erg handig voor dit soort dingen ;)
Maar ze worden niet geparsed als variabelen en daarom werkt het niet met here doc.

Overigens zou ik voor het vertalen van een website een functie gebruiken ipv een hele zooi variabelen/defines. En ja ook dan kan je here doc niet gebruiken maar je bent wel flexibeler bezig :)


offtopic:
erkje: leuke nick, zo heet mijn IRC bot ook 8)7

[ Voor 4% gewijzigd door Erkens op 29-10-2004 09:34 ]


Acties:
  • 0 Henk 'm!

  • Soultaker
  • Registratie: September 2000
  • Laatst online: 20-09 18:51
Erkens schreef op 29 oktober 2004 @ 09:33:
globale variabelen wil je voorkomen, defines zijn erg handig voor dit soort dingen ;)
Waarom dan? Ik ben het met je eens dat het niet netjes is de global namespace te vervuilen met teveel definities, maar dat geldt toch net zo hard voor definities als voor variabelen?
Overigens zou ik voor het vertalen van een website een functie gebruiken ipv een hele zooi variabelen/defines.
Tja, of je gebruikt direct de gettext-extensie van PHP. ;)

Acties:
  • 0 Henk 'm!

  • Erkens
  • Registratie: December 2001
  • Niet online

Erkens

Fotograaf

Soultaker schreef op 29 oktober 2004 @ 10:07:
Tja, of je gebruikt direct de gettext-extensie van PHP. ;)
dat bedoel ik ook, mits beschikbaar op de server, want anders moet je zelf zo'n (eenvoudige) functie schrijven :)

Acties:
  • 0 Henk 'm!

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 03:42

.oisyn

Moderator Devschuur®

Demotivational Speaker

Soultaker schreef op 29 oktober 2004 @ 09:21:
Maar kun je nu echt wat met defines wat je niet ook met globale variabelen kunt?
defines zijn nuttiger in de zin dat ze vanuit elke scope accessible zijn, zonder ze als global te definieren in een bepaalde functie zoals met variabelen moet. Hier maak ik in mijn forum gretig gebruik van; de tabelnamen staan bijvoorbeeld niet vast, ik lees een config file uit en define vervolgens alle variabelen die in de config file staan. In de database laag maak ik vervolgens steeds gebruik van die defines zonder dat ik elke keer moeilijk moet doen om ze eerst in de scope te introduceren.

Als ze nou eens gewoon die onzinnige manier van met scopes omgaan fixen...

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


Acties:
  • 0 Henk 'm!

  • Rataplan
  • Registratie: Oktober 2001
  • Niet online

Rataplan

per aspera ad astra

Soultaker schreef op 29 oktober 2004 @ 10:07:
Waarom dan? Ik ben het met je eens dat het niet netjes is de global namespace te vervuilen met teveel definities, maar dat geldt toch net zo hard voor definities als voor variabelen?
Met dat verschil dat je niet per ongeluk een eind verderop in je code een define kan overschrijven, met globale variabelen loop je dat risico wel - en dat is precies de reden dat globale vars als slecht worden gezien. Zéér spaarzaam gebruiken, en dan nog zéér specifieke namen geven.


Journalism is printing what someone else does not want printed; everything else is public relations.


Acties:
  • 0 Henk 'm!

  • Theuno
  • Registratie: Juni 2001
  • Laatst online: 14:58

Theuno

Da Devil Crew

Jij wilt preg_replace() achtige functies gebruiken. Hiermee kan je berijken dat je tekst kan vervangen.

Theuno - Da Devil Crew - Een programmeur is iemand die koffie omzet in software...
Nu nog betere koffie...


Acties:
  • 0 Henk 'm!

  • erkje
  • Registratie: Oktober 2001
  • Laatst online: 12-06-2024
Inderdaad, defines kun je niet overschrijven (daar kwam ik vandaag door ervaring achter). Iemand anders die aan hetzelfde project werkt had in een überconfigfile de TITLE van de pagina gemaakt (titelbalk). In mijn language file gebruikte ik die variabele voor elke pagina om bovenaan neer te zetten :)

@.oisyn
Databasetabellen doen wij ook op die manier. Werkt superhandig als je later je tabelnamen overhoop gooit (omdat ze niet echt consistente namen hadden... meervoud, enkelvoud, underscores wel/niet, afkortingen wel/niet). Alleen het tabelnamen-bestand aanpassen :7

taste and see that the Lord is good

Pagina: 1