PHP: Uncaught Error: Using $this when not in object context
VekTheGamer
Messages postés
6
Statut
Membre
-
yg_be Messages postés 24281 Date d'inscription Statut Contributeur Dernière intervention -
yg_be Messages postés 24281 Date d'inscription Statut Contributeur Dernière intervention -
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):
voici ma méthode fromArray (permettant de changer les propriétés de l'objet émission):
voici ma méthode html_liste_li_array (permettant de faire le li d'un émission à l'aide des propriétés de l'objet émission):
Merci à tous de votre aide.
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):
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 $oEmission) {
var_dump($oEmission);
$oEmission = self::fromArray($tEmission);
//$oEmission->sauvegarder();
}
$resultat .= $oEmission->html_liste_li_array();
}
//$resultat .= '</ul>';
//return $resultat;
}
voici ma méthode fromArray (permettant de changer les propriétés de l'objet émission):
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;
}
voici ma méthode html_liste_li_array (permettant de faire le li d'un émission à l'aide des propriétés de l'objet émission):
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;
}
| EDIT : Ajout des balises de code (la coloration syntaxique).
Explications disponibles ici :ICI Merci d'y penser dans tes prochains messages. |
Merci à tous de votre aide.
A voir également:
- Using $this when not in object context php
- Shockwave flash object - Télécharger - Divers Web & Internet
- Aux in ✓ - Forum Enceintes / HiFi
- Dc in - Forum Disque dur / SSD
- Navigation in private - Guide
- Peut-on brancher un casque sur une prise auxiliaire ? - Forum Casque et écouteurs
3 réponses
yg_be
Messages postés
24281
Date d'inscription
Statut
Contributeur
Dernière intervention
Ambassadeur
1 586
je suis étonné par la triple utilisation de $oEmission dans html_liste():
une fois comme critère du while:
une seconde fois, à l'intérieur du while, comme variable d'itération du foreach:
une troisième fois, à l'intérieur du foreach,
est-ce bien raisonnable? ne vaudrait-il pas mieux utiliser trois variables différentes?
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?
Bonsoir
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.
https://www.php.net/manual/fr/language.oop5.static.php
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.
https://www.php.net/manual/fr/language.oop5.static.php
class Emission { static public $table = "emissions"; public $id = 0; public $titre = ''; public $slug = ''; public $nbrefs = 0; public function __construct() { }<?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();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; }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.