[PHP 5.0 ] ARRAY als constante

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • whitehouse
  • Registratie: Maart 2000
  • Laatst online: 18-09-2019
IK heb de volgende code, die ik constant wilde maken :
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
class Config
{

function config() {
define($report['eng'][0], 'Row-Select has not been set');
define($report['eng'][1], 'Row-Action has not been set');

define($report['ned'][0], 'Row-Select is niet ingesteld');
define($report['ned'][1], 'Row-Action is niet ingesteld');
}


}

na enig worstelen, de hele PHP Manual te hebben doorgelezen, Tweakers te hebben doorgelezen, las ik dat het niet mogelijk is om een array constant te maken..

Weet iemand hoe het anders opgelost kan worden ??
Weet iemand ier

[ Voor 11% gewijzigd door whitehouse op 31-03-2005 17:37 ]

| www.everythingisspiritual.com | www.mosaic.org |


Acties:
  • 0 Henk 'm!

  • Soultaker
  • Registratie: September 2000
  • Laatst online: 22:43
Constanten zijn (zelfs voor PHP) echt waardeloos geïmplementeerd; je kunt ze inderdaad alleen voor scalaire waarden (strings, floats, etc.) gebruiken. De vraag is dus waarom je ze per se zo constant wil hebben (het is niet alsof iemand anders ze niet opnieuw kan definiëren als 'ie wel).

Ben je niet net zo gelukkig met een globale variabele? (Ik schrijf 'constanten' dan vaak in hoofdletters, zodat ze niet per ongeluk overschreven worden in lokale scope.) Je kunt er dan altijd bij en dat ze niet overschreven mogen worden is een kwestie van conventie.

Acties:
  • 0 Henk 'm!

  • whitehouse
  • Registratie: Maart 2000
  • Laatst online: 18-09-2019
ehm..ik wil ze niet constant maken om globaal te zijn..

| www.everythingisspiritual.com | www.mosaic.org |


Acties:
  • 0 Henk 'm!

  • Soultaker
  • Registratie: September 2000
  • Laatst online: 22:43
Wat wil je dan wel? Het is mij namelijk nog niet duidelijk.

Sowieso denk ik dat er maar heel weinig problemen zijn waarvan constanten in PHP dé oplossing zijn; ofwel ze zijn simpelweg ontoereikend (zoals het geval met arrays), ofwel een globale variabele voldoet ook wel.

[ Voor 6% gewijzigd door Soultaker op 31-03-2005 17:59 ]


Acties:
  • 0 Henk 'm!

  • Genoil
  • Registratie: Maart 2000
  • Laatst online: 12-11-2023
whitehouse schreef op donderdag 31 maart 2005 @ 17:45:
ehm..ik wil ze niet constant maken om globaal te zijn..
nee maar constanten zijn ook altijd globaal. aangezien je geen constante kunt gebruiken, kun je een globale array als vervanging gebruiken:

PHP:
1
2
3
4
global $MYCONSTANT;
$MYCONSTANT = array("foo", "bar");
..
print_r($GLOBALS['MYCONSTANT']);


nou en als het niet belangrijk is om ze globaal te hebben kan dit ook nog wel ( 8)7 )

PHP:
1
2
3
4
5
6
7
<?
$blaat = array("foo", "bar");

define("CONSTANT_BLAAT", "blaat");
print_r(${CONSTANT_BLAAT}[0]);

?>


ok en dit gaat helemaal nergens meer over maar het is in zekere zin een soort van globaal toegankelijke constante array:
PHP:
1
2
3
4
5
6
7
8
9
10
11
<?
global $blaat;
$blaat = array("foo", "bar");

define("CONSTANT_BLAAT", "GLOBALS['blaat']");

function outOfScope() {
    eval("print_r($".CONSTANT_BLAAT.");");
}
outOfScope();
?>

[ Voor 72% gewijzigd door Genoil op 31-03-2005 18:32 ]


Acties:
  • 0 Henk 'm!

Verwijderd

Ik begrijp dat je een constante wilt hebben omdat je deze globaal wilt kunnen benaderen, maar
je wilt het onmogelijk maken om de waarden aan te passen.

In ken PHP niet zo goed, maar biedt een constructie met een Singleton class niet een oplossing? Dat zou er dan ongeveer zo kunnen uitzien:

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
class Config
{
   private static $report = null;

   private static function Init()
   {
       self::$report = array();
       self::$report['eng'] = array('Row-Select has not been set', 'Row-Action has not been set');
       self::$report['ned'] = array('Row-Select is niet ingesteld', 'Row-Action is niet ingesteld');
   }

   public static function GetText($language, $index)
   {
       if(self::$report == null)
       {
          self::Init();
       }
       
       return self::$report[$language][$index];
   }
}


en dan als volgt gebruiken:

PHP:
1
   $txt = Config::GetText('eng',0);

Acties:
  • 0 Henk 'm!

  • whitehouse
  • Registratie: Maart 2000
  • Laatst online: 18-09-2019
singleton heb ik tot nu toe nooit van gehoord.. ik ga dit proberen, bedankt!!

ik zie zelf niet zo het nut in van globalen , juist omdat je dat wil afschermen binnen OOP.

Ik heb zelf een config class, die als config voor mijn CRM geldt.
Daarbinnen wil ik foutmeldingen als constanten gaan definieren, en deze meertalig.
Gezien de foutmeldingen niet veranderen, kan ik ze constant maken.

| www.everythingisspiritual.com | www.mosaic.org |


Acties:
  • 0 Henk 'm!

  • whitehouse
  • Registratie: Maart 2000
  • Laatst online: 18-09-2019
offtopic
----------------------------------------------------------------------

is $txt = Config::GetText('eng',0); hetzelfde als :

$txt = $this->Config->GetText('eng',0); ??
----------------------------------------------------------------------

| www.everythingisspiritual.com | www.mosaic.org |


Acties:
  • 0 Henk 'm!

Verwijderd

offtopic
----------------------------------------------------------------------

is $txt = Config::GetText('eng',0); hetzelfde als :

$txt = $this->Config->GetText('eng',0); ??
----------------------------------------------------------------------
Nee. Een singleton class is (in het voorbeeld hierboven) een class waarvan geen instanties worden gemaakt, maar waarvan de members static zijn. In PHP is de syntax voor het benaderen van static members "::" ipv "->".

zie ook: http://www.php.net/manual/en/language.oop5.static.php

Acties:
  • 0 Henk 'm!

  • whitehouse
  • Registratie: Maart 2000
  • Laatst online: 18-09-2019
is INIT() in dit geval hetzelfde hier als de constructor function Config() ?? (zelfde naam als de class-naam)

na testen bleek dit niet hetzelfde te zijn..

Kan ik al mijn andere functies voortaan ook beter zo aanroepen ?
(het lijkt erop dat $this->config->functienaam hetzelfde bewerkt als Config::functienaam ..)

[ Voor 50% gewijzigd door whitehouse op 01-04-2005 09:55 ]

| www.everythingisspiritual.com | www.mosaic.org |


Acties:
  • 0 Henk 'm!

Verwijderd

Ik denk dat je beter even de principes van object georienteerd programmeren in php (en in het algemeen) kunt leren. Je lijkt nu dingen door elkaar te halen.
Pagina: 1