self:: Isn’t inheritance-aware and always refers to the class it is being executed in. If you are using php5.3+ you might try static::TEST as static:: is inheritance-aware.
The difference is that static:: uses “late static binding”. Find more information here:
http://php.net/manual/en/language.oop5.late-static-bindings.php
Here’s a simple test script I wrote:
<?php
class One
{
const TEST = "test1";
function test() { echo static::TEST; }
}
class Two extends One
{
const TEST = "test2";
}
$c = new Two();
$c->test();
output
test2