[php5] constante ophalen uit onbekende class

Pagina: 1
Acties:

  • Genoil
  • Registratie: Maart 2000
  • Laatst online: 12-11-2023
Ik werk met een library waaruit PHP-code gegenereerd wordt zoals Foo en Bar uit het stukje code hieronder. Nu ben ik bezig met een stukje eigen code waarin ik de waarde van de in de klassen gedefineerde constanten nodig heb. Onderstaande manier is de enige manier waarop ik het voor elkaar krijg, maar ik vind her gebruik van eval() niet zo fraai. Kan het ook anders?

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
<?
class Foo {
    const ID = "foo.id";
}

class Bar {
    const ID = "bar.id";
}

$class = isset($_GET['class']) ? $_GET['class'] : "Foo";
eval("\$id = $class::ID;");
echo $id;
?>

  • JHS
  • Registratie: Augustus 2003
  • Laatst online: 04-01 15:49

JHS

Splitting the thaum.

PHP:
1
new $class();
Bovenstaande werkt. Ik heb niet gechecked of $class::CONSTANT ook werkt, maar ik zou eerlijkgezegd verwachten van wel :) .

DM!


  • Genoil
  • Registratie: Maart 2000
  • Laatst online: 12-11-2023
JHS schreef op woensdag 02 november 2005 @ 15:07:
PHP:
1
new $class();
Bovenstaande werkt. Ik heb niet gechecked of $class::CONSTANT ook werkt, maar ik zou eerlijkgezegd verwachten van wel :) .
Nee, dat werkt dus niet, parse error: unexpected T_PAAMAYIM_NEKUDOTAYIM

  • RedRose
  • Registratie: Juni 2001
  • Niet online

RedRose

Icebear

Wat is een T_PAAMAYIM_NEKUDOTAYIM? :?

Sundown Circus


  • DizzyWeb
  • Registratie: Februari 2001
  • Laatst online: 15:10

DizzyWeb

Ondertiteld


  • disjfa
  • Registratie: April 2001
  • Laatst online: 08-01 11:17

disjfa

be

disjfa - disj·fa (meneer)
disjfa.nl


  • Brakkie
  • Registratie: Maart 2001
  • Niet online

Brakkie

blaat

RedRose schreef op woensdag 02 november 2005 @ 15:15:
Wat is een T_PAAMAYIM_NEKUDOTAYIM? :?
Die twee ::

Je zal een functie in die klasse moeten maken om de constante terug te geven.

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
<?
class Foo {
    const ID = "foo.id";
    
    public function getID()
    {
        return self::ID;
    }
    
    
}

class Bar {
    const ID = "bar.id";
}

$class = isset($_GET['class']) ? $_GET['class'] : "Foo";

$FooInstance = new $class();

echo $FooInstance->getID();



?>

[ Voor 40% gewijzigd door Brakkie op 02-11-2005 15:21 ]

Systeem | Strava


  • RedRose
  • Registratie: Juni 2001
  • Niet online

RedRose

Icebear

Deze is dan leuker: http://nl2.php.net/manual....paamayim-nekudotayim.php ;) In de comments staat ook wel wat nuttigs voor de TS volgens mij. :)

/edit: wat Brakkie zegt dus inderdaad.

[ Voor 12% gewijzigd door RedRose op 02-11-2005 15:25 ]

Sundown Circus


  • Brakkie
  • Registratie: Maart 2001
  • Niet online

Brakkie

blaat

of zo:

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<?
class Foo {
    const ID = "foo.id";
}

class Bar {
    const ID = "bar.id";
}

$class = isset($_GET['class']) ? $_GET['class'] : "Foo";

$class2 = new ReflectionClass($class);

$constants = $class2->getConstants();


print_r($constants);
?>

[ Voor 24% gewijzigd door Brakkie op 02-11-2005 15:31 ]

Systeem | Strava


  • Genoil
  • Registratie: Maart 2000
  • Laatst online: 12-11-2023
Functies toevoegen aan die gegenereerde classes is idd goed mogelijk, maar betrekkelijk bewerkelijk, aangezien ze onderdeel zijn van een ORM model. Dat zou betekenen dat ik voor alle classes van elk nieuw model een berg functies zou moeten bijcoden. Het gebruik van zo'n ReflectionClass is dan een stuk eleganter, alleen heb ik geen idee hoeveel overhead dat geeft ivm zo'n eval().

  • Brakkie
  • Registratie: Maart 2001
  • Niet online

Brakkie

blaat

Kwestie van testen met een timertje. Maar Eval is volgens mij echt belachelijk traag dus ik denk dat dat wel goed zit.

Systeem | Strava


  • Genoil
  • Registratie: Maart 2000
  • Laatst online: 12-11-2023
Brakkie schreef op woensdag 02 november 2005 @ 15:40:
Kwestie van testen met een timertje. Maar Eval is volgens mij echt belachelijk traag dus ik denk dat dat wel goed zit.
Dat zit idd wel goed:
code:
1
2
reflection: 0.0082588195800781s
eval: 0.02119517326355s
Pagina: 1