PHP: Uncaught Error: Using $this when not in object context
Fermé
VekTheGamer
Messages postés5Date d'inscriptionvendredi 18 décembre 2015StatutMembreDernière intervention10 avril 2017
-
Modifié le 10 avril 2017 à 20:06
yg_be
Messages postés22721Date d'inscriptionlundi 9 juin 2008StatutContributeurDernière intervention25 avril 2024
-
11 avril 2017 à 12:09
Bonjour,
je doit faire un page web en PHP qui affiche une liste d'émissions de télévision à partir d'une base de données .sqlite, mais il y a un problème:
Fatal error: Uncaught Error: Using $this when not in object context in C:\Users\utilisateur\Desktop\qcref_projet2_v2\classes\Emission.class.php:112 Stack trace: #0 C:\Users\utilisateur\Desktop\qcref_projet2_v2\classes\Emission.class.php(103): Emission::html_liste_li_array() #1 C:\Users\utilisateur\Desktop\qcref_projet2_v2\classes\Emission.class.php(203): Emission::html_liste() #2 {main} thrown in C:\Users\utilisateur\Desktop\qcref_projet2_v2\classes\Emission.class.php on line 112
voici les méthodes problématiques dans la classe émission:
voici ma méthode html_liste (permettant de faire le ul des émissions):
C'est bien une class? Car il semble que c'est impossible d'accéder à $this, donc à la class.
VekTheGamer
Messages postés5Date d'inscriptionvendredi 18 décembre 2015StatutMembreDernière intervention10 avril 2017 10 avril 2017 à 20:52
Oui c'est une classe, la preuve, au début du fichier de la classe Émission, je l'ai déclaré en tant que classe et j'ai les propriétés plus la méthode __construct...
class Emission {
static public $table = "emissions";
public $id = 0;
public $titre = '';
public $slug = '';
public $nbrefs = 0;
public function __construct() {
}
yg_be
Messages postés22721Date d'inscriptionlundi 9 juin 2008StatutContributeurDernière intervention25 avril 20241 476
>
VekTheGamer
Messages postés5Date d'inscriptionvendredi 18 décembre 2015StatutMembreDernière intervention10 avril 2017 10 avril 2017 à 22:02
pourquoi ne pas nous montrer le fichier complet?
VekTheGamer
Messages postés5Date d'inscriptionvendredi 18 décembre 2015StatutMembreDernière intervention10 avril 2017
>
yg_be
Messages postés22721Date d'inscriptionlundi 9 juin 2008StatutContributeurDernière intervention25 avril 2024 10 avril 2017 à 22:05
d'accord, voici la classe en question:
<?php
include_once "Qcref.class.php";
class Emission {
static public $table = "emissions";
public $id = 0;
public $titre = '';
public $slug = '';
public $nbrefs = 0;
public function __construct() {
}
// static public function getObject($slug, $prendreRefs=false) {
// $resultat = self::getOne($slug, PDO::FETCH_CLASS);
// if ($prendreRefs) {
// $resultat->refs = Ref::donnees("WHERE emission_id=".$resultat->id);
// }
// return $resultat;
// }
static public function getObject(/*$slug, $prendreRefs=false*/) {
$SQL = "SELECT titre FROM emissions";
$pdo = Qcref::connecter();
//var_dump($pdo);
$req = $pdo->prepare($SQL);
//var_dump($req);
$req->execute();
//$resultat = var_dump($req);
$enr = $req->fetchObject();
return $enr;
}
// static public function getArray($slug) {
// $pdo = Qcref::connecter();
// $SQL = "SELECT * FROM view_emissions $WHERE ORDER BY titre";
// $req = $pdo->prepare($SQL);
// $req->execute();
// if (!isset($donnees[$slug])) {
// return false;
// } else {
// return $donnees[$slug];
// }
// }
/*static public function donnees($WHERE='') {
$pdo = Qcref::connecter();
$SQL = "SELECT * FROM view_emissions $WHERE ORDER BY titre";
$req = $pdo->prepare($SQL);
$req->setFetchMode(PDO::FETCH_ASSOC);
$req->execute();
$resultat = self::donnees_fromReq($req);
return $resultat;
}*/
static public function donnees_fromReq($req) {
$resultat = [];
while (($enr = $req->fetch()) !== false) {
$resultat[$enr['slug']] = $enr;
}
return $resultat;
}
static public function html_article_array($array) {
$resultat = '';
$resultat .= '<article>';
$resultat .= '<header>';
$resultat .= '<h1>'.$array['titre'].'</h1>';
$resultat .= '</header>';
$resultat .= '<div class="body">';
$resultat .= '<div class="image">';
$resultat .= '<img src="images/emissions/'.$array['slug'].'.jpg" alt="'.$array['titre'].'";>';
$resultat .= '</div>';
$resultat .= '<div class="details">';
$resultat .= '<h3>Liste des références</h3>';
$resultat .= 'La liste des références vient ici';
$resultat .= '</div>';
$resultat .= '</div>';
$resultat .= '</article>';
return $resultat;
}
// static public function html_liste() {
// //$donnees = self::donnees();
// $resultat = '';
// $resultat .= '<ul class="list">';
// foreach ($donnees as $slug=>$emission) {
// $resultat .= self::html_liste_li_array($emission);
// }
// $resultat .= '</ul>';
// return $resultat;
// }
static public function html_liste() {
$SQL = "SELECT * FROM emissions";
$pdo = Qcref::connecter();
$req = $pdo->prepare($SQL);
$req->execute();
$resultat = '';
//$resultat .= '<ul class="list">';
while(($oEmission = $req->fetchObject('Emission')) !== false) {
//var_dump($oEmission);
$tEmission = get_object_vars($oEmission);
//var_dump($tEmission['slug']);
//var_dump($tEmission);
foreach ($tEmission as $emissions) {
$oEmission = self::fromArray($tEmission);
var_dump($oEmission);
//$oEmission->sauvegarder();
}
$resultat .= $oEmission->html_liste_li_array();
}
//$resultat .= '</ul>';
//return $resultat;
}
static public function html_liste_li_array() {
$resultat = '';
$resultat .= '<li>';
$resultat .= '<img src="images/emissions/'.$this->slug.'_64x64.jpg" alt="'.$this->titre.'">';
$resultat .= '<div>';
$resultat .= '<div class="titre">'.self::html_lienTitre_array($array).'</div>';
$resultat .= '<div class="nbrefs">'.$array['nbrefs'].' références</div>';
$resultat .= '</div>';
$resultat .= '</li>';
return $resultat;
}
public function sauvegarder() {
}
/*public function toArray($array) {
$resultat = [];
$resultat['id'] = $this->id;
$resultat['titre'] = $this->titre;
$resultat['slug'] = $this->slug;
return resultat;
}*/
static public function html_lienTitre_array($array) {
$resultat = '';
$resultat .= self::html_lienDetails($this->slug, $this->titre);
return $resultat;
}
static public function html_lienDetails($slug, $contenu) {
$resultat = '';
$resultat .= '<a href="emissions_details.php?slug='.$slug.'" rel="nofollow noopener noreferrer" target="_blank">'.$contenu.'</a>';
return $resultat;
}
static public function fromArray($array) {
$resultat = new self();
if (isset($array['id'])) {
$resultat->id = $array['id'];
}
if (isset($array['titre'])) {
$resultat->titre = $array['titre'];
}
if (isset($array['slug'])) {
$resultat->slug = $array['slug'];
}
return $resultat;
}
static public function html_form() {
$resultat = '';
return $resultat;
}
static public function html_form_titre($valeur="") {
$resultat = '';
$resultat .= '<div>';
$resultat .= '<label for="titre">Titre : </label>';
$resultat .= '<input type="text" name="titre" id="titre" value="'.$valeur.'" style="width:30em;"/>';
$resultat .= '</div>';
return $resultat;
}
static public function html_form_slug($valeur="") {
$resultat = '';
$resultat .= '<div>';
$resultat .= '<label for="slug">Slug : </label>';
$resultat .= '<input type="text" name="slug" id="slug" value="'.$valeur.'" style="width:30em;"/>';
$resultat .= '</div>';
return $resultat;
}
static public function select() {
$pdo = Qcref::connecter();
$SQL = "SELECT titre, slug FROM emissions ORDER BY titre";
$req = $pdo->query($SQL);
$resultat = '';
$resultat .= '<select name="emission_slug" id="emission_slug">';
while (($enr = $req->fetch()) !== false) {
$resultat .= '<option value="'.$enr['slug'].'">';
$resultat .= $enr['titre'];
$resultat .= '</option>';
}
$resultat .= '</select>';
return $resultat;
}
static public function sql_creerTable() {
$table = self::$table;
$champs[] = "id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT";
$champs[] = "texte TEXT NOT NULL";
$champs[] = "auteur TEXT";
$champs = implode(",", $champs);
$SQL = "CREATE TABLE $table ($champs);";
return $SQL;
}
static public function sql_supprimerTable() {
$table = self::$table;
$SQL = "DROP TABLE IF EXISTS $table;";
return $SQL;
}
}
//echo Emission::getObject(/*'dexter', $prendreRefs=false*/);
echo Emission::html_liste();
yg_be
Messages postés22721Date d'inscriptionlundi 9 juin 2008StatutContributeurDernière intervention25 avril 20241 476
>
VekTheGamer
Messages postés5Date d'inscriptionvendredi 18 décembre 2015StatutMembreDernière intervention10 avril 2017 11 avril 2017 à 12:09
je vois une soupe bizarre avec $oEmission, $tEmission et $emission.
je vois de multiples anomalies, en voici deux:
tu assignes $emission en ligne 14, et tu ne l'utilises jamais.
$oEmission est assigné en ligne 8, puis bizarrement écrasé en ligne 15.
je suggère d'utiliser des noms plus clairs pour tes variables.
yg_be
Messages postés22721Date d'inscriptionlundi 9 juin 2008StatutContributeurDernière intervention25 avril 20241 476 10 avril 2017 à 20:53
je suis étonné par la triple utilisation de $oEmission dans html_liste():
une fois comme critère du while:
$oEmission = $req->fetchObject
une seconde fois, à l'intérieur du while, comme variable d'itération du foreach:
foreach ($tEmission as $oEmission
une troisième fois, à l'intérieur du foreach,
$oEmission =
est-ce bien raisonnable? ne vaudrait-il pas mieux utiliser trois variables différentes?
VekTheGamer
Messages postés5Date d'inscriptionvendredi 18 décembre 2015StatutMembreDernière intervention10 avril 2017 10 avril 2017 à 21:09
Alors, quelles variables faudrait-il que je mettre à leurs places?
yg_be
Messages postés22721Date d'inscriptionlundi 9 juin 2008StatutContributeurDernière intervention25 avril 20241 476
>
VekTheGamer
Messages postés5Date d'inscriptionvendredi 18 décembre 2015StatutMembreDernière intervention10 avril 2017 10 avril 2017 à 22:07
eh bien, j'ai essayé de te suggérer quelque chose, mais j'y renonce, je ne comprends rien à ton code.
Tu utilises $this dans html_liste_li_array qui est une méthode statique.
Or, tu ne peux pas utiliser $this dans une méthode statique.
Une méthode statique est prévue pour ne pas être liée à un objet particulier, et this sert à désigner l'objet courant.
10 avril 2017 à 20:52
10 avril 2017 à 22:02
10 avril 2017 à 22:05
11 avril 2017 à 12:09
je vois de multiples anomalies, en voici deux:
tu assignes $emission en ligne 14, et tu ne l'utilises jamais.
$oEmission est assigné en ligne 8, puis bizarrement écrasé en ligne 15.
je suggère d'utiliser des noms plus clairs pour tes variables.