[PHP] variabele aanroepen in een functie?

Pagina: 1
Acties:
  • 219 views sinds 30-01-2008
  • Reageer

Onderwerpen


Acties:
  • 0 Henk 'm!

  • Eusebius
  • Registratie: November 2001
  • Niet online
Vandaag heb ik mijn hoofd gebroken over een probleem waar ik niet uit kom. Daarom stel ik de vraag hier. Ik heb een simpel scriptje, dat ik van een nederlands forum af heb gehaald. Het produceert een status bar, die je kunt gebruiken om aan te geven hoe ver het met een project staat. Techniek is om een tabel met 2 cellen neer te zetten, waarbij de breedte van de cellen variabel is (naar $status). Ik geef toe, het kan geavanceerder, maar het is een vingeroefening.

Nu definieer ik aan het begin van het bestand de breedte van de hele status bar.
code:
1
$table_width = "200";


Verderop bepaal ik in een if ... elseif ... else string wat er getoond moet worden als het project 100% klaar is (resp. geen bar, een hele bar met 1 cel (bij 2 cellen zie je bij 100% nl een stukje wit van de 2e cel), en de code om te bepalen hoe de 2 cellen zich verhouden.

Nu roep ik in de return de variabele $table_width aan, die niet wordt herkend ... rara waarom niet?
code:
1
return "<table width='".$table_width."' border='1' ... (snip)

De rest van de return werkt wel. Wijzigingen die ik daarin aanbreng, worden direct meegenomen.

[ Voor 48% gewijzigd door Eusebius op 25-11-2006 17:47 ]

==
hoi


Acties:
  • 0 Henk 'm!

  • sTeVuu
  • Registratie: Oktober 2005
  • Laatst online: 08-08-2023
Gebruik global (php.net/variables.scope) om variabelen uit de global scope naar de functie-scope te halen.

PHP:
1
2
3
4
5
$test = 5;
function test() {
  global $test;
  echo $test; // 5
}

[ Voor 36% gewijzigd door sTeVuu op 25-11-2006 17:49 . Reden: Linkje verbeterd ]


Acties:
  • 0 Henk 'm!

  • Eusebius
  • Registratie: November 2001
  • Niet online
Sorry, but the function global is not in the online manual.
Bestaat ie niet (meer) of heet ie anders :)

==
hoi


Acties:
  • 0 Henk 'm!

  • AW_Bos
  • Registratie: April 2002
  • Laatst online: 11:52

AW_Bos

Liefhebber van nostalgie... 🕰️

global is geen functie... ;)
Het is gewoon ene onderdeel van de functions()-functie.

[ Voor 50% gewijzigd door AW_Bos op 25-11-2006 17:49 ]

Telecommunicatie van vroeger
🚅Alles over spoor en treintjes


Acties:
  • 0 Henk 'm!

Verwijderd

Geen global gebruiken in dit geval, maar gewoon de variabele meegeven als als argument. Je zult de functie dus iets moeten wijzigen.

Acties:
  • 0 Henk 'm!

  • krvabo
  • Registratie: Januari 2003
  • Laatst online: 19-09 22:02

krvabo

MATERIALISE!

http://www.zend.com/manual/language.variables.scope.php

Lees anders eerst een manual of een boek.

Pong is probably the best designed shooter in the world.
It's the only one that is made so that if you camp, you die.


Acties:
  • 0 Henk 'm!

  • Michali
  • Registratie: Juli 2002
  • Laatst online: 29-05 22:54
Hier lijkt mij een constante heel geschikt voor. Die is overigens overal beschikbaar:
PHP:
1
2
3
4
5
define('TABLE_WIDTH', 200);
function getTableHTML()
{
  return '<table style="width: ' . TABLE_WIDTH . 'px;">...';
}

Noushka's Magnificent Dream | Unity


Acties:
  • 0 Henk 'm!

  • Guldan
  • Registratie: Juli 2002
  • Laatst online: 11:30

Guldan

Thee-Nerd

Michali schreef op zaterdag 25 november 2006 @ 19:23:
Hier lijkt mij een constante heel geschikt voor. Die is overigens overal beschikbaar:
PHP:
1
2
3
4
5
define('TABLE_WIDTH', 200);
function getTableHTML()
{
  return '<table style="width: ' . TABLE_WIDTH . 'px;">...';
}
hmm wel geschikt maar ik zou het gewoon aan de functie meegeven:

PHP:
1
2
3
4
function showTable($width)
{
   return '<table style="width: ' . $width . 'px;">...';
}

You know, I used to think it was awful that life was so unfair. Then I thought, wouldn't it be much worse if life were fair, and all the terrible things that happen to us come because we actually deserve them?


Acties:
  • 0 Henk 'm!

  • pietje63
  • Registratie: Juli 2001
  • Laatst online: 21:10

pietje63

RTFM

Door dit topic (waarop ik het antwoord wel min od meer wist) kom ik wel op de volgende vraag:

waneer gebruik je
  • DEFINE
  • global
  • geef je het me in de functie
  • nog een andere optie?
Ik gebruik ot nu toe meestal optie 3.. maar dat komt meer door onwetendheid/onervarenheid mbt andere mogelijkhede.

De grootste Nederlandstalige database met informatie over computers met zoekfunctie!!


Acties:
  • 0 Henk 'm!

  • JHS
  • Registratie: Augustus 2003
  • Laatst online: 16-09 16:02

JHS

Splitting the thaum.

Het nadeel van global is dat die variabele aangetast kan worden door elke functie zonder dat de functie waar je hem voor schrijft er weet van heeft :) . Het heeft dus de voorkeur om global te vermijden. Omdat constantst niet verandert kunnen worden heb je dat probleem niet, maar is het gelijk wel een voorwaarde dat het werkelijk een constante waarde heeft.

Het voordeel van het meegeven aan de functie is dat duidelijk is waar de fout ligt. Je kan bij de functie aangeven welke variabelen meegegeven moeten worden en waar deze aan moeten doen, en de gebruiker van die functie dient maar te zorgen dat dat dat gebeurt. Je bent zo niet afhankelijk van een implementatie elders bij het schrijven van je functie.

edit:
Met betrekking tot de TS: Het is inderdaad verstandig om hier even de manual voor te lezen zodat je begrijpt wat er gebeurt :P :) . Het komt er in het kort op neer dat als je ergens een variabele een waarde meegeeft, deze waarde niet gelijk overal bekend is, maar slechts binnen zijn 'scope'. Wil je dat de waarde overal bekend is, kan je hem global maken door dat keyword mee te geven, of door hem als constant te definen. Vaak is het echter beter om zo'n variabele mee te geven aan een functie, zie ook wat ik hierboven schreef.

Overigens zegt 'newbie' natuurlijk niet zoveel, dus dat heb ik even uit je topictitel gesloopt :P :) .

[ Voor 33% gewijzigd door JHS op 26-11-2006 17:28 ]

DM!


Acties:
  • 0 Henk 'm!

  • Michali
  • Registratie: Juli 2002
  • Laatst online: 29-05 22:54
pietje63 schreef op zondag 26 november 2006 @ 17:17:
Door dit topic (waarop ik het antwoord wel min od meer wist) kom ik wel op de volgende vraag:

waneer gebruik je
  • DEFINE
  • global
  • geef je het me in de functie
  • nog een andere optie?
Ik gebruik ot nu toe meestal optie 3.. maar dat komt meer door onwetendheid/onervarenheid mbt andere mogelijkhede.
Het is heel erg afhankelijk van je situatie.

Een global heb je in ieder geval weinig nodig. Een global is goed te gebruiken als een (vaste!) set bekende functies een bepaalde waarde gebruikt en manipuleert. De waarde is dan alleen toegankelijk via die functies en absoluut verboden op een andere manier. Zo kun je de toegang tot de globale variabel goed controleren, wat bijna alle nadelen wegneemt. Een Singleton class kan een goed voorbeeld zijn, maar ook een hele slechte, dus pas daar mee op.

Als een waarde van te voren bekend is of dit op moment van defineren te berekenen is, en op alle te gebruiken plaatsen dan hetzelfde is, dan kun je hiervoor logisch het beste een define (constant) gebruiken. Het voordeel is dat deze niet meer aan te passen is (of je moet hele smerige tools gaan gebruiken) en je geen beperkingen qua scope hebt.

Als je een generieke functie wilt maken, welke te parameteriseren is met enkele waarden, welke in verschillende contexten steeds anders kunnen zijn (en dus echte variabelen zijn), dan kun je hiervoor het beste een parameter gebruiken.

In dit specifieke geval is het moeilijk kiezen tussen een define of een parameter. Dat is geheel afhankelijk van het gebruik. Als de waarde altijd hetzelfde is, maar je het wel gemakkelijk wilt kunnen instellen in een apart bestand, dan zou ik voor de define gaan. Als de waarde wel afhankelijk is van de context waarin de functie wordt aangeroepen, dan een parameter. Iets wat hier zeker niet kan is een global.

Noushka's Magnificent Dream | Unity

Pagina: 1