I have a static function in a class that needs to be called from several child classes. I need a constant from the calling child class to be available in that function. To have these constants available in other places, the child classes have a function that returns the value of that constant (php 5.2.9).
However, when in the parent class, I can´t seem to access that constant, not with the function nor directly. Is that even possible in php 5.2.9 or do I need to pass it as an argument?
This is a simple version of the code:
abstract class ParentClass {
static function DoSomething() {
$not_working = self::show_const();
$not_working_either = self::SOME_CONST;
return 'working';
}
}
class ChildClass extends ParentClass {
const SOME_CONST = 'some string';
function show_const() {
return self::SOME_CONST;
}
}
$result = ChildClass::DoSomething();
Edit: the error generated is:
- Call to undefined method ParentClass::show_const() (for function)
- Undefined class constant ‘SOME_CONST’ (using self::SOME_CONST)
Unfortunately, what you’re trying to do isn’t going to work pre 5.3. The problem here is early static binding versus late static binding. The
selfkeyword binds early, so it only looks in the class where it is used to resolve symbols. The magic constant__CLASS__or the functionget_class()won’t work either, these do early static binding as well. For this reason PHP 5.3 extended thestatickeyword to mean late binding when used asstatic::some_method().So in 5.3 this would work: