In PHP5, what is the difference between using const
and static
? When is each appropriate? And what role does public
, protected
and private
play - if any.
views:
519answers:
4In 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; they are only useful for class variables, including static variable.
- public static variables can be accessed anywhere via ClassName::$variable.
- protected static variables can be accessed by the defining class or extending classes via ClassName::$variable.
- private static variables can be accessed only by the defining class via ClassName::$variable.
Declaring a class method or property as statis makes them accessible without needing an instantiation of the class.
A class constant is just like a normal constant, it cannot be changed at runtime. This is also the only reason you will ever use const for.
Private, public and protected are access modifiers that describes who can access which parameter/method.
Public means that all other objects gets access. Private means that only the instantiated class gets access. Protected that the instantiated class and derived classes gets access.
Constant is just a constant, i.e. you can't change its value after declaring.
Static variable is accessible without making an instance of a class and therefore shared between all the instances of a class.
Also, there can be a static local variable in a function that is declared only once (on the first execution of a function) and can store its value between function calls, example:
function foo()
{
static numCalls = 0;
numCalss++;
print('this function has been executed " . numCalls . " times");
}
One last point that should be made is that a const is always static and public. This means that you can access the const from within the class like so:
class MyClass
{
const MYCONST = true;
public function test()
{
echo self::MYCONST;
}
}
From outside the class you would access it like this:
echo MyClass::MYCONST;