Do you have a question? Post it now! No Registration Necessary.  Now with pictures!

Threaded View
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';
    case 'SecondClass' :
        $val = 'second val';
    case 'ThirdClass' :
        $val = 'third val';
   //  ...

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?

Re: $stringVar::constant?

Gordon wrote:
Quoted text here. Click to load it

Not real nice, but it can be done...


class FirstClass {
     const VAL = 'First val';

class SecondClass {
     const VAL = 'Second val';

$cname = 'FirstClass';
$str = $cname . '::VAL;';
eval('echo ' . $str . ';');
echo "\n";

$cname = 'SecondClass';
$str = $cname . '::VAL;';
eval('echo ' . $str . ';');
echo "\n";



First val
Second val

But I don't like it :-)

Remove the "x" from my email address
Jerry Stuckle
JDS Computer Training Corp.

Re: $stringVar::constant?

.oO(Jerry Stuckle)

Quoted text here. Click to load it

Neither do I. According to the manual this

echo $thisClass::VAL;

should become possible with PHP 5.3. Until then the Reflection API might
be another option, but I haven't tried it.


Re: $stringVar::constant?

Quoted text here. Click to load it

Thanks.  Further investigation turned up the eval() option but I
really don't like using eval(), especially on user-provided data, even
if it has been validated.  You never know what you might have missed.
On the other hand reflection might be overkill...

Re: $stringVar::constant?

On Fri, 27 Jun 2008 09:15:36 -0700 (PDT), Gordon

Quoted text here. Click to load it

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.php for
more info.

Site Timeline