$stringVar::constant?

Collapse
This topic is closed.
X
X
 
  • Time
  • Show
Clear All
new posts
  • Gordon

    $stringVar::constant?

    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::VA L);

    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?
  • Jerry Stuckle

    #2
    Re: $stringVar::con stant?

    Gordon wrote:
    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::VA L);
    >
    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?

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

    <?php

    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";

    ?>

    Outputs

    First val
    Second val

    But I don't like it :-)

    --
    =============== ===
    Remove the "x" from my email address
    Jerry Stuckle
    JDS Computer Training Corp.
    jstucklex@attgl obal.net
    =============== ===

    Comment

    • Michael Fesser

      #3
      Re: $stringVar::con stant?

      ..oO(Jerry Stuckle)
      >Gordon wrote:
      >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.
      >[...]
      >>
      >echo ($thisClass::VA L);
      >>
      >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?
      >
      >
      >Not real nice, but it can be done...
      >
      ><?php
      >
      >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";
      >
      >?>
      >
      >Outputs
      >
      >First val
      >Second val
      >
      >But I don't like 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.

      Micha

      Comment

      • Gordon

        #4
        Re: $stringVar::con stant?

        On Jun 28, 3:13 pm, Michael Fesser <neti...@gmx.de wrote:
        .oO(Jerry Stuckle)
        >
        >
        >
        Gordon wrote:
        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.
        [...]
        >
        echo ($thisClass::VA L);
        >
        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?
        >
        Not real nice, but it can be done...
        >
        <?php
        >
        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";
        >
        ?>
        >
        Outputs
        >
        First val
        Second val
        >
        But I don't like 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.
        >
        Micha
        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...

        Comment

        • Charles Calvert

          #5
          Re: $stringVar::con stant?

          On Fri, 27 Jun 2008 09:15:36 -0700 (PDT), Gordon
          <gordon.mcvey@n tlworld.comwrot e in
          <de6b1e03-90aa-465f-89f1-6df9019b9ca4@c6 5g2000hsa.googl egroups.com>:
          >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::VA L);
          >
          >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.c onstants.phpfor
          more info.

          Comment

          Working...