[PHP] Globals in classes

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • Reveal!
  • Registratie: November 1999
  • Laatst online: 08:36
Ik heb een class in een php file en include deze class in mijn script.
Nou heb ik deze declarering boven in het script staan en roep deze prefix ook aan in de class in het andere script, maar deze herkent negeert de variabel.....
Iemand enig idee wat dit kan zijn, de rest vh script pakt ehm wel alleen de class file niet ...

Ziet er zo uit...

global $table_prefix ;
$table_prefix = 'table_';

include ("classfile.php");
include ("db.php");

rest vh script

Acties:
  • 0 Henk 'm!

Verwijderd

In die classfile moet je weer die global $... zetten wellicht?

Acties:
  • 0 Henk 'm!

  • Erkens
  • Registratie: December 2001
  • Niet online

Erkens

Fotograaf

Is die table prefix altijd hetzelfde?
Waarom dan geen define gebruiken? Werkt veel handiger en je hebt geen last van smerige global constructies :)

Acties:
  • 0 Henk 'm!

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

JHS

Splitting the thaum.

Ik zou daar dan ook geen globals voor gebruiken, maar constants, met behulp van define(); :) .

DM!


Acties:
  • 0 Henk 'm!

  • Reveal!
  • Registratie: November 1999
  • Laatst online: 08:36
Dus dat wordt

define("table_prefix", "voip_");

Maar hoe roep je die dan aan ?
Ik heb nu bv.

UPDATE " . $table_prefix . "tablename etc......

Dat wordt dan " . echo table_prefix . " ofzo :S

Acties:
  • 0 Henk 'm!

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 09-09 13:58

NMe

Quia Ego Sic Dico.

Waarom echo? Je gebruikt gewoon table_prefix in plaats van $table_prefix. Overigens kan ik je aanraden voor defines namen in hoofdletters te kiezen, zodat je in één oogopslag ziet dat het constanten zijn. In PHP zie je dat sowieso aan het feit dat er geen $ voor staat, maar het is in andere talen gangbaar en dus wel zo consequent het in PHP ook te doen. :)

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Acties:
  • 0 Henk 'm!

  • Erkens
  • Registratie: December 2001
  • Niet online

Erkens

Fotograaf

Reveal! schreef op donderdag 04 mei 2006 @ 15:54:
Dus dat wordt

define("table_prefix", "voip_");

Maar hoe roep je die dan aan ?
Ik heb nu bv.

UPDATE " . $table_prefix . "tablename etc......

Dat wordt dan " . echo table_prefix . " ofzo :S
PHP:
1
2
3
4
5
define("TABLE_PREFIX", "voip_");

// ..

$query = "UPDATE " . TABLE_PREFIX . "tablename etc....";


ik heb een voorkeur voor HOOFDLETTERS met constanten :)

Acties:
  • 0 Henk 'm!

  • Reveal!
  • Registratie: November 1999
  • Laatst online: 08:36
Dit werkt idd wel !
Zeer veel dank !

Acties:
  • 0 Henk 'm!

  • _fool
  • Registratie: Augustus 2003
  • Nu online

_fool

Helemaal zo gek nog niet

Hey,

Ik heb in een eerder progsel precies dezelfde constructie gebruikt als TS: een globale variabele met daarin een table-prefix die toegankelijk moet zijn voor meerdere bestanden. Nadeel van die $global (afgezien van het feit dat het 'vies' is :P) is dat ik hem -zoals TS al zegt- in iedere functie opnieuw moet aanroepen.

Nu lees ik dat het makkelijker en mooier kan, met behulp van define(). Maar uit de manual van define kan ik niet opmaken of een variabele die ik define in file A ook bereikbaar is voor file B, C, etc. Of nog concreter: als ik in settings.php een variabele define, en ik require die settings.php in file.php, heeft de code in file.php dan toegang tot de inhoud van die variabele?

En puur uit nieuwsgierigheid: zijn $globals altijd fout? Of is er een situatie denkbaar waar ze wel wenselijk, of zelfs noodzakelijk zijn?

edit: even mee getest, werkt inderdaad voorbeeldig. Dank! _/-\o_

[ Voor 19% gewijzigd door _fool op 05-05-2006 15:13 ]

specs


Acties:
  • 0 Henk 'm!

  • Erkens
  • Registratie: December 2001
  • Niet online

Erkens

Fotograaf

Een contante (die je dus maakt met define) is beschikbaar vanaf het punt dat je hem declareerd tot het moment dat je script eindigd. Dus ja ook in alle includes is die beschikbaar :)
Echter in tegenstelling tot global variabelen is een constante (zoals de naam al zegt) niet meer te veranderen.

Er zijn idd soms situaties waarin een global variabele wel handig is, maar je moet het tot een minimum beperken, bijvoorbeeld een instantie van je database class kan soms handig zijn om die global te hebben. Mijn voorkeur gaat dan wel uit om die in $GLOBALS te zetten, dan hoef je ook niet meer iedere keer met 'global' te werken in elke functie.
Pagina: 1