zag2010
zag2010

Reputation: 509

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?

Upvotes: 2

Views: 61

Answers (1)

scrowler
scrowler

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

Related Questions