web-dev-qa-db-fra.com

Erreur d'analyse: erreur de syntaxe, inattendu '(', attente ',' ou ';' dans

Je reçois l'erreur d'analyse suivante:

Erreur d'analyse: erreur de syntaxe, inattendue '(', attend ',' ou ';' dans H:\Programs\USBWebserver v8.5\8.5\root\oopforum\func\register.class.php sur la ligne 7

qui se rapporte à la ligne de code suivante dans ma classe:

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

Je ne vois pas pourquoi cette ligne de code provoquerait une erreur d'analyse?

Voici un code environnant:

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;
        }
}

Quelle est la cause de l'erreur d'analyse?

17
crmepham

Vous ne pouvez pas initialiser les variables membres à quelque chose qui n'est pas statique et vous essayez d'appeler une fonction.

De le manuel :

Cette déclaration peut inclure une initialisation, mais cette initialisation doit être une valeur constante, c'est-à-dire qu'elle doit pouvoir être évaluée au moment de la compilation et ne doit pas dépendre des informations d'exécution pour être évaluée.

La solution de contournement consiste à définir votre variable dans le constructeur:

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

Vous ne pouvez pas faire ça:

private $image_dimensions = getimagesize($temp_dir);

Les fonctions, les variables et tout autre élément non statique ne peuvent pas être appelés pour définir des variables de classe.

4
Tyler Carter