#1
  1. Contributing User
    Devshed Newbie (0 - 499 posts)

    Join Date
    Dec 2016
    Location
    Lakewood, WA
    Posts
    192
    Rep Power
    17

    Questions about Constants


    Two parts to this question...

    One: When defining constants, what is the difference between
    PHP Code:
    define("SOMETHING""Blaw, blaw, blaw");
    define("SOMETHINGELSE""1234"); 
    ...and...
    PHP Code:
    const SOMETHING 'Blaw, blaw, blaw';
    const 
    SOMETHINGELSE '1234'
    Second: What is the preferred method of inclusion?

    a) As an included file; or
    b) As an included class...

    Each script that I am thinking about has constants that need to be editable in an "admin" mode, thus I intend to implement this by having a writable file (class or otherwise) where the "admin" script will open it, locate the appropriate line of code, and changes some values.

    Examples I have seen involving a class use the second form, and the PHP documentation seems to indicate the use of const in a class.
  2. #2
  3. Forgotten Moderator
    Devshed Supreme Being (6500+ posts)

    Join Date
    Mar 2007
    Location
    Washington, USA
    Posts
    16,206
    Rep Power
    9644
    define() is a fully dynamic way of creating constants: the name is a string so you could build that at runtime (but I can't imagine a good reason to do so) and the value can be any expression to be evaluated, possibly including variables or function calls.
    PHP Code:
    define("HOSTNAME"gethostname()); // allowed 
    Non-class const is more restrictive: the name is a token in code (not a string) and the value must itself be a constant value (string, int, etc.) or a constant expression.
    PHP Code:
    const HOSTNAME gethostname(); // not allowed
    const THREE 2// constant expressions are allowed 
    Unless you need to use a dynamic value, const is better than define().

    Class-level const is the same concept as the non-class const but works differently: using the same rules, it defines a constant as if a static member of a class. This is more appropriate when you have a constant that is specific to a particular class and so should not be defined at a global level.
    PHP Code:
    class HasAConstant {

        const 
    FOO "bar";

    }

    echo 
    FOO// undefined global constant
    echo HasAConstant::FOO// bar 
    Last edited by requinix; March 19th, 2017 at 05:25 PM.

IMN logo majestic logo threadwatch logo seochat tools logo