2

I am trying to access a static class member variable in an array.

My Code (index.php):

<?php

class Foo
{
    public static $staticVar = 'test';
}

class Bar
{
    public $someArray = array(
        Foo::$staticVar
    );
}

$cls = new Bar();

var_dump($cls->someArray);

?>

On PHP-7.0 I get this error:

PHP Fatal error: Constant expression contains invalid operations in /var/www/html/index.php on line 12

On PHP-5.6 I get this error:

PHP Parse error: syntax error, unexpected '$staticVar' (T_VARIABLE), expecting identifier (T_STRING) or class (T_CLASS) in /var/www/html/index.php on line 11

I just want to have the string "test" in my array.

It´s strange that when I 'echo' out the variable it works as expected:

echo Foo::$staticVar // prints 'test'

I´m new to PHP and I can´t figure out what I´m doing wrong.

1 Answer 1

2

Unfortunately, you can't refer to another variable or class in the initial declaration of a class property. It's just a limitation of the language as it stands. The general workaround is to initialise the property in the constructor, e.g.

class Bar
{
    public $someArray = array();

    public function __construct()
    {
        $this->someArray = array(
            Foo::$staticVar
        );
    }
}

On a vaguely related note, PHP 5.6 did at least make some vague headway in allowing you to define constants as basic expressions, see https://3v4l.org/6TDZV

Sign up to request clarification or add additional context in comments.

2 Comments

So is there any workaround to get the string into the array? I´m just curious how to get rid of that error and/or make it more the 'php way'.
@hecaex Added an example to the answer

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.