Bonjour,
Je viens de débuter dans la POO et j'ai un petit problème avec php storm. Tous d'abord, mon script fonctionne parfaitement, c'est jusque que php storm me met ma page en jaune (qu'il y a des erreurs) et moi j'aimerais qu'elle soit verte.

Le problème et que j'ai une class competition qui à besoin de la connection à la bdd pour fonctionner. Les deux classes sont dans le même dossier. J'ai donc Competition.php et Connection.php

La classe compétition:

class competition{

    private $bdd;
    public function __construct($bdd){

            $this-> bdd = $bdd;
    }

    public function Add($section){

        $req = $this->bdd -> prepare('requet SQL');
        $req -> execute(array(param));

     }
 }

La classe connection

class Connection {

  private $db_name;
  private $db_user;
  private $db_pass;
  private $db_host;
  public $pdo;
  private static $_instance;

  public function  __construct($db_name, $db_user,$db_pass, $db_host){

    $this ->db_name = $db_name;
    $this ->db_user= $db_user;
    $this ->db_pass = $db_pass;
    $this ->db_host= $db_host;
  }

  public function getPDO(){

    if($this->pdo === NULL){

        $this->pdo = new PDO('param');
    }

    return $this->pdo;
  }

  public static function getInstance(){

    if(is_null(self::$_instance)){

        self::instance = new Connection();
    }

    return self::$_instance;
    }
  }
}

Le code lorsque je créer une instance de compétition:

$dbb = Connection::getInstance();
$competition = new Competition($dbb -> getPDO());

il me dit que j'ai un problème au niveau du prepare et de l'execute.
J'aimerais lui préciser que c'est obligatoirement une instance de connection que je lui passe en paramètre mais si je fais cela il ne veux pas.

Je pense que c'est un problème de structure du code mais je n'arrive pas a m'en dépatouiller seul :(

Merci d'avance

Fred

4 réponses


Bonjour.
Pour commencer, si ton problème concerne PhpStorm, ton sujet n'est pas bien placé, il devrait se situer dans le forum IDE.
Ensuite, si tu veux que nous t'aidions, fais un minimum attention au code que tu nous montre, car quand je vois public fonction au lieu de public function, mais aussi des trucs du genre : $this->bdd -> prepare, $this ->db_name (donc des espaces qui ne devraient pas exister).
Donc, corriges les erreurs qu'il y a lors de ta recopie du code, si tu veux avoir de l'aide.

1) Je pense qu'il est au contraire bien placé ... j'ai pas de problème avec mon ide. j'ai juste mon IDE qui me dit que j'ai des methods qui sont pas défini: prepare et execute. S'il me dit cela, c'est que mon code n'est pas super propre.

Si mon IDE me met un message d'erreur quand j'écris cela:

$mon_array = array#pomme, poire, banane#;

Et que je comprend pas pourquoi j'ai un message d'erreur de la par de mon ide, je dois le mettre dans le forum IDE ?

2) J'ai corrigé pour le function, je ne suis pas sur le meme pc que celui ou il y a mon code. Pour les espace, j'ai des espace dans le code d'origine (qui fonctionne), alors je ne vois pas le problème. Est ce une bonne pratique du php ?

Tous d'abord, mon script fonctionne parfaitement, c'est jusque que php storm me met ma page en jaune (qu'il y a des erreurs) et moi j'aimerais qu'elle soit verte.

Donc, ça concerne l'IDE et non le PHP, en toute logique oui, tu dois poster dans IDE et non dans PHP.
Sinon c'est que tu nous ment dans ta phrase.
Et puis, PhpStorm, ne peut pas gérer tous les cas de figures, que ce soit concernant les Framework, les technologies et les manières de coder, pour faire simple, il n'est pas infaillible.
Il peut donc très bien te dire que tu as une erreur, alors que ce n'est peut-être pas le cas.

<?php

namespace Vendor\Package;

use PDO;

class Competition
{

    private $bdd;
    public function __construct(PDO $bdd)
    {

        $this->bdd = $bdd;
    }

    public function Add($section)
    {

        $req = $this->bdd->prepare('requet SQL');
        $req->execute(array(param));

    }
}

Plusieurs trucs :

  • toutes tes classes devraient être dans un namespace;
  • une classe par fichier.