Bonjour,

Depuis que je suis passé à la version 8 de PHP j'ai plusieurs bug.
J'ai réussi à corriger la plus part mais il m'en reste un sur le quel je restre bloqué.

Dans mes Class, pour les fonctions qui ont un public ou private devant j'ai bizarrement une erreur...

syntax error, unexpected token "public"
syntax error, unexpected token "private"

Voici un exemples d'une de mes fonctions :

    public function VerifEmail($field = 'email'){

      $this->VerifEmailValid($field);
      $this->isEmpty($field);

    }

Si je retire le public je n'ai plus l'erreur, mais évidemment la fonction ne peu plus être appelé...

   -> Call to undefined method

Auriez-vous une solution ?

6 réponses


quenti77
Réponse acceptée

Il te manque une "}" après

$this->bootstrap = New Bootstrap();

Du coup c'est bizarre que ça ne plante pas avant ?

Avec le code que tu donne il faudrait que ça ressemble à ça :

<?php

namespace Root\Form;

use \Root\Data\Database;
use \Root\Data\Data;
use \Root\App\App;
use \Root\HTML\HTML;
use \Root\HTML\Bootstrap;
use \Root\App\Date;
use \Root\App\Securite;
use Intervention\Image\ImageManagerStatic as Image;

class Validator
{

    private $data;
    private $html;
    private $bootstrap;

    public $errors = [];

    public function __construct($data)
    {

        $this->data = Securite::Bdd($data);
        $this->html = new HTML();
        $this->bootstrap = new Bootstrap();
    }

    public function getMessage($message = null, $default = NULL)
    {
        return $message ? $message : $default;
    }

    public function getField($field)
    {

        if (!isset($this->data[$field])) {

            return null;
        }
        return $this->data[$field];

    }

    public function VerifEmail($field = 'email')
    {

        $this->VerifEmailValid($field);
        $this->isEmpty($field);

    }
}

En fait sans mettre le public avant fonction tu déclare une fonction à l'intérieur de la méthode construct. Sauf que si tu ajoute public forcément ce n'est plus valide. En gros tu as le droit de faire ceci :

<?php

class Validator
{
    public function check()
    {
        function verify() {}

        verify();
    }
}

$validator = new Validator();
$validator->check();

Mais du coup verify n'est pas une méthode de Validator. C'est juste une fonction accessible que pour l'intérieur de la méthode check. Et comme tu as oublié l'accolade c'est ce que ça donne :)

Hello,

Peut-on avoir un peu plus de code pour avoir le contenu avant le public function ?

Re, merci pour ton aide,

C'est une Class Validator. Je sais pas si c'est vraiment utile par ce qu'elle a toujours fonctionné, en tout cas avec PHP 7.

Mais voila le début de la Class :

namespace Root\Form;

use \Root\Data\Database;
use \Root\Data\Data;
use \Root\App\App;
use \Root\HTML\HTML;
use \Root\HTML\Bootstrap;
use \Root\App\Date;
use \Root\App\Securite;
use Intervention\Image\ImageManagerStatic as Image;

class Validator{

    private $data;
    private $html;
    private $bootstrap;

    public $errors = [];

    function __construct($data){

      $this->data = Securite::Bdd($data);
      $this->html = New HTML();
      $this->bootstrap = New Bootstrap();

    function getMessage($message = null,$default = NULL){
       return $message ? $message : $default;
    }

    function getField($field){

      if (!isset($this->data[$field])) {

        return null;
      }
      return $this->data[$field];

    }

    function VerifEmail($field = 'email'){

      $this->VerifEmailValid($field);
      $this->isEmpty($field);

    }

PS : C'est la version ou j'ai retiré les public pour tester...

Je pose la question dans un autre message car c'est plus pour informations : tu suis quel tutoriel ?

Je ddemande car j'ai un peu peur du code xD
Déjà le Secure::BDD j'ai l'impression que tu fais du traitement avant insertion en base (type htmlspecialchars) et ce n'est pas bon.

Re

Pour répondre à ta question j'avais suivi le tuto de grafikart en faite. La POO en PHP. Après j'ai aussi un peu adapté à mes besoin. Mais je vais prendre en compte ton conseil.

Sinon j'ai pas trop compris mon erreur.. J'ai toujours fait comme ça jusqu'a maintenant mes class sans avoir cette erreur.

C'est tout bon en fait ! Y'avait bien un soucis avec une accolade qui manquait. Rhaaa... on se prend la tête longtemps pour des choses bête parfois.

Merci pour ton aide !