Reputation: 509
When you have inherited classes, where the child class sets some constants and the parent class has a static method that needs to use them:
class some_helperclass {
public static function add_them() {
return self::some_c + self::another_c;
}
}
class mainclass extends some_helperclass {
const some_c = 1;
const another_c = 2;
}
I get an error when I try to execute this:
mainclass::add_them()
Is there a way to get this to work?
Upvotes: 2
Views: 61
Reputation: 24405
This is a good example of how late static binding works.
I won't rewrite the documentation for it, but the TL;DR is that self
refers to the literal class that executes the code. In your example it's mainclass
that defines the constants, but some_helperclass
that reads them so it doesn't work using self
.
If you change to use static::CONST_NAME
it will work.
Also - it's good practice to name constants in upper case only.
Code example:
<?php
class some_helperclass {
public static function add_them() {
return static::some_c + static::another_c;
}
}
class mainclass extends some_helperclass {
const some_c = 1;
const another_c = 2;
}
var_dump(mainclass::add_them());
Output: int(3)
Upvotes: 3