Possible Duplicate:
New self vs. new static
What is the difference between using self
and static
in the example below?
class Foo
{
protected static $bar = 1234;
public static function instance()
{
echo self::$bar;
echo "\n";
echo static::$bar;
}
}
Foo::instance();
produces
1234
1234
When you use
self
to refer to a class member, you're referring to the class within which you use the keyword. In this case, yourFoo
class defines a protected static property called$bar
. When you useself
in theFoo
class to refer to the property, you're referencing the same class.Therefore if you tried to use
self::$bar
elsewhere in yourFoo
class but you had aBar
class with a different value for the property, it would useFoo::$bar
instead ofBar::$bar
, which may not be what you intend:When you use
static
, you're invoking a feature called late static bindings (introduced in PHP 5.3).In the above scenario, using
static
instead ofself
will result inBar::$bar
being used instead ofFoo::$bar
, because the interpreter then takes into account the redeclaration within theBar
class.You typically use late static bindings for methods or even the class itself, rather than properties, as you don't often redeclare properties in subclasses; an example of using the
static
keyword for invoking a late-bound constructor can be found in this related question: New self vs. new staticHowever, that doesn't preclude using
static
with properties as well.In the following example (see get_called_class()), class B inherits both methods from class A. Self is bound to A because it's defined in A's implementation of the method, whereas static is bound to the called class despite the fact that it's also in A's implementation of the method.