On Fri, 27 Jun 2008 09:15:36 -0700 (PDT), Gordon
<gordon.mcvey@ntlworld.comwrote in
<de6b1e03-90aa-465f-89f1-6df9019b9ca4@c65g2000hsa.googlegroups.com>:
Quote:
>I'm trying to get a constant from a class, where the constant's name
>is known, but the class name isn't. I want to do things this way
>because I want classes to be able to define certain aspects for their
>setup themselves.
>
>For example: I have a situation where I have a script that can deal
>with objects of one of several classes, but each class needs some
>slightly different setup parameters. I'm currently taking care of
>this with a switch statement, but i'd like to eliminate it if at all
>possible. As it stands, my code is along the lines of:
>
>$thisClass = 'FirstClass'; // Will come from an external source in
>real life, validated of course!
>
>switch ($thisClass)
>{
case 'FirstClass' :
$val = 'first val';
break;
case 'SecondClass' :
$val = 'second val';
break;
case 'ThirdClass' :
$val = 'third val';
break;
// ...
>}
>
>echo ($val);
>
>I'd rather do something along the lines of
>
>class FirstClass
>{
const VAL = 'First val';
>}
>//...
>
>echo ($thisClass::VAL);
>
>I'm guessing that there is some function that returns a class from a
>string, but I can't find it. Can anyone help out here?
There are a couple of OO options, assuming that you're using php 5.
1. Inheritance. If you can make all of the classes inherit from a
base class, make the constant a member of the base class, then
override it in the derived classes. You can then access the constant
by assigning the instance of the derived class to a variable declared
as the base class.
2. Interface. If #1 isn't feasible, create an interface that contains
the required constant, then make each class implement that interface.
You can then access the instance of the class via a variable declared
as the interface.
See <http://www.php.net/manual/en/language.oop5.constants.phpfor
more info.