[PHP] Variabele wel of niet beschikbaar?

Pagina: 1
Acties:

  • kaandorp
  • Registratie: November 1999
  • Laatst online: 03-09 22:36
Als je in je script een variabele definieerd is die in je hele script te gebruiken. Hij is ook in je classes en je includes te gebruiken. Hij is echter NIET in je functies te gebruiken. Binnen een functie kun je alleen variabelen gebruiken die binnen de functie beschikbaar zijn.

Nou is mijn vraag:
Is een variabele die je in je script definieerd wel of niet beschikbaar in een functie die binnen een class ligt.

  • thomaske
  • Registratie: Juni 2000
  • Laatst online: 09-09 14:51

thomaske

» » » » » »

Nee, ook niet beschikbaar in je class.

evt werken met een global (liever niet)

Verder zou je het zelf gewoon even kunnen proberen, dan weet je het gelijk...

Brusselmans: "Continuïteit bestaat niet, tenzij in zinloze vorm. Iets wat continu is, is obsessief, dus ziekelijk, dus oninteressant, dus zinloos."


  • ACM
  • Registratie: Januari 2000
  • Niet online

ACM

Software Architect

Werkt hier

Variabelen die je in functies wilt kunnen gebruiken hoor je gewoon mee te geven aan de functie...

dus functie_aanroep($var1, $var2, etc)

Verwijderd

Waarom eigenlijk geen gebruik maken van globale variabelen binnen een functie? Weet je een betere oplossing dan?

Ik begrijp het meegeven aan een functie wel, maar why niet met global $var

  • Nielsz
  • Registratie: Maart 2001
  • Niet online
Op woensdag 20 maart 2002 17:17 schreef haltink het volgende:
Waarom eigenlijk geen gebruik maken van globale variabelen binnen een functie? Weet je een betere oplossing dan?

Ik begrijp het meegeven aan een functie wel, maar why niet met global $var
omdat dat lelijk is.

  • brammetje
  • Registratie: Oktober 2000
  • Laatst online: 12-01-2025
Op woensdag 20 maart 2002 17:17 schreef haltink het volgende:
Waarom eigenlijk geen gebruik maken van globale variabelen binnen een functie? Weet je een betere oplossing dan?

Ik begrijp het meegeven aan een functie wel, maar why niet met global $var
tja, dan krijg je een beetje ranzige code.

Je kan aan de aanroep van je functie bijvoorbeeld niet zien welke vars er voor nodig zijn.

  • brammetje
  • Registratie: Oktober 2000
  • Laatst online: 12-01-2025
Op woensdag 20 maart 2002 17:23 schreef Nielsz het volgende:
omdat dat lelijk is.
lekker veelzeggend antwoord..

  • ACM
  • Registratie: Januari 2000
  • Niet online

ACM

Software Architect

Werkt hier

Op woensdag 20 maart 2002 17:17 schreef haltink het volgende:
Waarom eigenlijk geen gebruik maken van globale variabelen binnen een functie? Weet je een betere oplossing dan?

Ik begrijp het meegeven aan een functie wel, maar why niet met global $var
Simpelweg omdat dat buiten de scope van je functie zou moeten vallen.

De functie bewerkt een setje variabelen, doet er wat leuks mee en geeft eventueel es wat terug.
Het is niet de bedoeling dat de functie buiten dat nog zaken van 'de omgeving' aanpast.

Er zijn wel wat voorbeelden te bedenken waarbij de global onontbeerlijk is, maar meestal is dat niet het geval.

  • thomaske
  • Registratie: Juni 2000
  • Laatst online: 09-09 14:51

thomaske

» » » » » »

[topic=349493]

Brusselmans: "Continuïteit bestaat niet, tenzij in zinloze vorm. Iets wat continu is, is obsessief, dus ziekelijk, dus oninteressant, dus zinloos."


  • Anders
  • Registratie: December 2000
  • Laatst online: 24-08 18:29
Ik snap de argumenten waarom je geen globale variabelen zou mogen gebruiken in functies nog steeds niet. Het komt nauwelijks verder dan:
omdat dat lelijk is.
dan krijg je een beetje ranzige code.
Simpelweg omdat dat buiten de scope van je functie zou moeten vallen.
En dat vind ik nietszeggende antwoorden. Ze maken me nog steeds niet duidelijk wat er nou fout aan is, als het toch werkt.

Voorbeeld: ik ben bezig met de ontwikkeling van een beheermodule. Door de gehele beheermodule worden metavariabelen gebruikt, die standaard in bepaalde functies gebruikt worden. Die kan ik meegeven aan elke functie, maar dan kost het aanroepen van die functies me elke keer 3-4 regels. Definiëer ik ze als global variabelen - wat ze in het beheersysteem ook feitelijk zijn, ze hebben betrekking op de gehele beheeromgeving, niet enkel op die ene functie, dan ben ik veel sneller klaar en wordt het aanroepen van de functies een stuk overzichtelijker. Nadelen ervan zijn me niet overtuigend duidelijk, ook niet nadat ik tig threads hierover gelezen heb. Ja, dat je de variabelenaam niet opnieuw kan gebruiken, maar daarom beginnen global variabelen bij mij dan ook exclusief met $meta_.

Ik zou OO kunnen werken maar dan niet alleen maar omdat volgens sommigen "zo hoort", maar omdat het onweerlegbaar beter is. Helaas zijn tot nog toe de argumenten tegen het incidenteel gebruik van global variables - althans op GoT - bijzonder mager.

Ik spoor veilig of ik spoor niet.


  • ACM
  • Registratie: Januari 2000
  • Niet online

ACM

Software Architect

Werkt hier

Lekker flauw zeg :{ :P

Jij geeft een goed voorbeeld waarom je _wel_ global-vars kan gebruiken.
Op woensdag 20 maart 2002 17:53 schreef Anders het volgende:
Helaas zijn tot nog toe de argumenten tegen het incidenteel gebruik van global variables - althans op GoT - bijzonder mager.
Incidentieel gebruiken, zeker met een dergelijke goed voorbeeld, is ook niks op tegen.

Maar steevast gebruiken, om te pas en te onpas een variabele binnen je functie te halen is imho 'not-done' en behalve dat je code er onduidelijker van wordt ook nog es potentieel gevaarlijk als je buiten je functie om een variabele denkt te kunnen gebruiken die binnen een functie aanroep ineens veranderd van waarde.

  • Anders
  • Registratie: December 2000
  • Laatst online: 24-08 18:29
Ja flauw he :)

Maar ik ben er nog mar even ingedoken en kwam de volgende anekdote van Rasmus Lerdorf (een van de ontwikkelaars van PHP) tegen die me toch weer aan het denken zette:
When I was writing the first version of PHP I had a real day job. In this real day job I was one of a couple of developers on a very large project. And we had a bug. Nobody could find this bug and the deadline was getting closer. We single-stepped, we added break points, we debugged for days. I finally got extremely stubborn and printed out everything. All 350,000 lines of code on a dot-matrix printer and laid out the code in the hallways where I worked. I fought with the cleaning crews as I crawled along on my hands and knees with different coloured pens and traced through everything. After 2 16 hour sessions I found the problem. It was a function that changed a global by mistake as a side effect.

At that point I swore that I would never have that problem again. I mandated a rule that forced everyone to list the global variables they used in comments at the top of every function. However, as I was also writing PHP at the time, I had the chance to force this right at the language level. If you forgot to declare your variable global then the variable would simply be local to the function and the function probably wouldn't work as expected, but at least it would not cause weird side effects other distant parts of the code and thus a local/global mistake would be much much easier to track down.
Bron: Google/Dejanews

Nou is het natuurlijk wel zo dat als je met classes werkt, je daarin ook de belangrijke variabelen die je herhaaldelijk gebruikt, ook per ongeluk kunt wijzigen, en dan ben je even ver van huis. Of zie ik dat verkeerd? Ik moet zeggen dat ik classes, ook al heb ik er wel wel eens een behoorlijke CMS mee gemaakt, nog steeds niet echt onder de knie heb, en het coden zonder classes wel.

Ik spoor veilig of ik spoor niet.


  • ACM
  • Registratie: Januari 2000
  • Niet online

ACM

Software Architect

Werkt hier

Op woensdag 20 maart 2002 18:09 schreef Anders het volgende:
Maar ik ben er nog mar even ingedoken en kwam de volgende anekdote van Rasmus Lerdorf (een van de ontwikkelaars van PHP) tegen die me toch weer aan het denken zette:
Prachtig verhaal :)

Maar met een goed beleid valt het nog wel mee.
Nou is het natuurlijk wel zo dat als je met classes werkt, je daarin ook de belangrijke variabelen die je herhaaldelijk gebruikt, ook per ongeluk kunt wijzigen, en dan ben je even ver van huis.
Over het algemeen kan je variabelen van de omgeving niet wijzigen dmv een class (tenzij je natuurlijk weer global gebruikt) de lokale (class) vars kan je ook alleen maar wijzigen als je dat expliciet opgeeft ($this->var = newvalue;) en dan hoef je alsnog alleen binnen een class te zoeken naar de fout.
Pagina: 1