zag2010 zag2010 - 29 days ago 6
PHP Question

Using constants in inherited php classes

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?

Answer Source

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)