Bonjour,
Je veux afficher une liste d'éléments sans instancier la classe Calls à l'aide des fonctions statiques. Or, ici je rencontre un pb car lorsque j'essaie de mettre static à ma seconde fonction ci-jointe, mon editeur (PHP STORM) m'indique une erreur au niveau de $this ... Je ne comprends pas et ne trouve pas comment résoudre mon pb. Pourriez-vous s'il vous plait me donner une piste de recherche ?
class Calls
{
protected $pdo;
protected $o;
public function __construct()
{
$this->pdo = Database::getPDO();
}
public function getCalls(){
$rest = $this->pdo->prepare(...);
...
}
}
class Calls
{
protected $pdo;
protected $o;
public function __construct()
{
$this->pdo = Database::getPDO();
}
public static function getCalls(){
$rest = $this->pdo->prepare(...);
...
}
}
Merci d'avance !
Salut. Il est impossible d'utiliser le $this à l'intérieur d'une méthode statique.
tu pourra gérer avec ça
class Calls
{
protected $pdo;
protected $o;
protected static $_instance = null;
protected static function instance()
{
if(is_null(self::$_instance)) {
$class = __CLASS__;
self::$_instance = new $class();
}
return self::$_instance;
}
public function __construct()
{
$this->pdo = Database::getPDO();
}
public static function getCalls(){
$instance = self::instance();
$rest = $instance->pdo->prepare(...);
...
}
}
Bonjour.
C'est impossible ce que tu demandes, surtout avec ton code comme ceci.
Car tu instancies PDO seulement au moment ou la classe elle même est instanciée, par conséquent la propriété pdo
n'est pas définie au moment où tu utilises la méthode getCalls
, si tu n'instancies pas la classe avant.
Je te recommande de regarder : La POO en PHP » Propriétés et Méthodes statiques.
OK. C'est pas grave mais c'est vrai que j'aurai voulu faire comme ceci... Merci
Je vais (re)regarder la vidéo
Ca peut marcher mais c'est moche :
class Calls
{
protected static $pdo = null;
protected $o;
public static function getPDO()
{
if(self::pdo === null)
{
self::pdo = Database::getPDO();
}
return self::pdo;
}
public static function getCalls(){
$pdo = self::getPDO();
$rest = $pdo->prepare(...);
...
}
}
Mais comme quenti77 je ne vois pas le besoin.
Bonjour, désolé pour le retard de réponse, le besoin est de pouvoir appeler la fonction, sans instancier la classe avec le new ...
Merci pour vos propositions,
enfin entre
public function __construct()
{
$this->pdo = Database::getPDO();
}
public static function getCalls(){
$rest = $this->pdo->prepare(...);
...
}
et
public function __construct()
{
$this->pdo = new \PDO();
}
public static function getCalls(){
$rest = $this->pdo->prepare(...);
...
}
je vois pas la différence à écrire mais bon ce n'est que mon avis.
Sinon moi j'ai une classe statique Providers dans laquelle je charge toutes mes différentes connexions, Mysql, SQLServer, AD, ... et là je fais un provider::get('mysql') et j'ai mon pdo.
Bonjour, merci pour vos propositions. C'était pas forcement dans la classe mais plus du côté du front où ça "m'emmerdais" de devoir faire un new quelque chose.