Ошибка анализа: синтаксическая ошибка, неожиданный '(', ожидающий ',' или ';' в

Я получаю следующую ошибку синтаксического анализа:

Ошибка анализа: синтаксическая ошибка, неожиданная '(', ожидающая ',' или ';' в H:\Programs\USBWebserver v8.5\8.5\root\oopforum\func\register.class.php в строке 7

который относится к следующей строке кода в моем классе:

private $random_name = rand(1000,9999).rand(1000,9999).rand(1000,9999).rand(1000,9999);

Я не понимаю, почему эта строка кода вызовет ошибку синтаксического анализа?

Вот какой-то окружающий код:

class register{
    public $post_data = array();
        private $dbh;
        private $allowed_type = array('image/jpeg','image/png','image/gif');
        private $random_name = rand(1000,9999).rand(1000,9999).rand(1000,9999).rand(1000,9999);
        private $path = 'img/thumb_/'.$random_name. $_FILES['file']['name'];
        private $max_width = 4040;
        private $max_height = 4040;
        private $max_size = 5242880;
        private $temp_dir = $_FILES['file']['tmp_name'];
        private $image_type = $_FILES['file']['type'];
        private $image_size = $_FILES['file']['size'];
        private $image_name = $_FILES['file']['name'];
        private $image_dimensions = getimagesize($temp_dir);
        private $image_width = $image_dimensions[0]; // Image width
        private $image_height = $image_dimensions[1]; // Image height
        private $error = array();

        public function __construct($post_data, PDO $dbh){
        $this->post_data = array_map('trim', $post_data);
        $this->dbh = $dbh;
        }
}

Что вызывает ошибку синтаксического анализа?

Ответы

Ответ 1

Вы не можете инициализировать переменные-члены для чего-либо, что не является статичным, и вы пытаетесь вызвать функцию.

Из руководства:

Это объявление может включать инициализацию, но это инициализация должна быть постоянной величиной, то есть она должна иметь возможность оцениваться во время компиляции и не должны зависеть от времени выполнения информацию для оценки.

Обходной путь заключается в установке переменной в конструкторе:

private $random_name;
public function __construct() { 
    $this->random_name = rand(1000,9999).rand(1000,9999).rand(1000,9999).rand(1000,9999);
}

Ответ 2

Вы не можете этого сделать:

private $image_dimensions = getimagesize($temp_dir);

Функции, переменные и все остальное не статическое не могут быть вызваны для установки переменных класса.