phpobjectconstantsclass-designstatic-members

PHP 5: const vs static


In PHP 5, what is the difference between using const and static?

When is each appropriate? And what role does public, protected and private play - if any?


Solution

  • In the context of a class, static variables are on the class scope (not the object) scope, but unlike a const, their values can be changed.

    class ClassName {
        static $my_var = 10;  /* defaults to public unless otherwise specified */
        const MY_CONST = 5;
    }
    echo ClassName::$my_var;   // returns 10
    echo ClassName::MY_CONST;  // returns 5
    ClassName::$my_var = 20;   // now equals 20
    ClassName::MY_CONST = 20;  // error! won't work.
    

    Public, protected, and private are irrelevant in terms of consts (which are always public); they are only useful for class variables, including static variable.


    Edit: It is important to note that PHP 7.1.0 introduced support for specifying the visibility of class constants.