6

here is the fatal error:

Fatal error: Constant expression contains invalid operations

I get a fatal error in this code:

<?php class InfoClass { private $user_agent = $_SERVER['HTTP_USER_AGENT']; // error is on this line public static function getOS() { global $user_agent; $os_platform = "Unknown OS Platform"; ... } 

i am using php 7. why is this error showing? thanks

6
  • 2
    Because $_SERVER['HTTP_USER_AGENT']; is "run-time" information; and class property declaration may include an initialization, but this initialization must be a constant value -- that is, it must be able to be evaluated at compile time and must not depend on run-time information in order to be evaluated. Commented Jan 2, 2017 at 0:13
  • @MarkBaker ok how do i fix it then? Commented Jan 2, 2017 at 0:14
  • You assign it in the class constructor, and instatiate an object... and wtf is global $user_agent; supposed to be? Is it something that should be passed as an argument to the method? Commented Jan 2, 2017 at 0:15
  • @MarkBaker i dont know, i got this from this post: stackoverflow.com/a/18070424/4357238 Commented Jan 2, 2017 at 0:17
  • The problem is that constant does not have a value when that line is executed by PHP. To resolve it, you can initialise the variable as an empty string, and then assign it a value inside the method. However, this code is bad design. Perhaps you should try to restructure the flow. Commented Jan 2, 2017 at 0:28

1 Answer 1

7

Do This Instead

<?php class InfoClass { private $user_agent; public function __construct(){ $this->user_agent = $_SERVER['HTTP_USER_AGENT']; // error is on this line } public static function getOS() { global $user_agent; $os_platform = "Unknown OS Platform"; ... } 

Hope it Helps

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

2 Comments

This helped me :)
For me not work because I'll otbain an empty value.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.