Using $this when not in object context...

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : Using $this when not in object context...

Re: Using $this when not in object context...

par xTG » 18 juil. 2012, 15:03

Bah l'interprétation vérifie les erreurs de syntaxes et bien plus. ;)

Re: Using $this when not in object context...

par kissphp » 18 juil. 2012, 11:39

Merci ! :D

J'ai trouvé grâce à toi.

Il y avait bien un appel static mais beaucoup plus loin dans le code et en dehors de la classe.
Je ne pige pas pourquoi php me plante pour un appel qui n'a pas encore été exécuté.

Il y a une compilation du code avant exécution sur les moteur PHP ?
Je pensais que c'était de l'interprétation pure.

Re: Using $this when not in object context...

par xTG » 18 juil. 2012, 09:14

Cette erreur peut être générée sur l'appel de la fonction suivante :
public function printValue($recNumber=0, $fieldName='recid', $repetition=0){
        echo fm_reccord::getValue($recNumber, $fieldName, $repetition);
    }
Là tu fais un appel statique, et donc dans getValue le $this est hors contexte.
Sinon aucun souci.

Voici mon code de test qui fonctionne sans erreur :
<?php
class Record{
	private $recid = null;
	public function __construct($val){
		$this->recid = $val;
	}
	public function getRecordId(){
		return $this->recid;
	}
	public function getField($name, $repetition){
		return $this->recid;
	}
}

class FileMaker_Result{

	public function getRecords(){
		return array(
			new Record(0),
			new Record(1)
		);
	}
	public function getFetchCount(){
		return 10;
	}

}

class fm_reccord{

    private $refdata;

    public function __construct(FileMaker_Result& $data) {
   $this->refdata=&$data;
   return NULL;
    }

    public function __destruct() {
   return NULL;
    }
   
   
   
    public function getValue($recNumber=0, $fieldName='recid', $repetition=0){
   $reccords = $this->refdata->getRecords();
   $reccord  = $reccords[$recNumber];
   
   if($recNumber >= $this->refdata->getFetchCount()) return NULL;
        else if($fieldName=='recid') return $reccord->getRecordId();
        else return $reccord->getField($fieldName,$repetition);
    }
   
    public function printValue($recNumber=0, $fieldName='recid', $repetition=0){
        echo fm_reccord::getValue($recNumber, $fieldName, $repetition);
    }
}
$reccord = new fm_reccord(new FileMaker_Result);
$reccord->getValue(0,'recid');

Re: Using $this when not in object context...

par kissphp » 18 juil. 2012, 07:30

Je ne penses pas non...

Voila l'appel :

Code : Tout sélectionner

$reccord = new fm_reccord($data); $_SESSION[EDIT_RECID]=$reccord->getValue(0,'recid');

Re: Using $this when not in object context...

par momox » 17 juil. 2012, 20:00

Non non non et non !

Si il y a une erreur, c'est qu'il y a un problème.

Ca c'est dégueulasse, ce n'est ni fait ni a faire !
Par hasard, tu n'aurais pas appelé ta fonction en statique ?

Re: Using $this when not in object context...

par kissphp » 17 juil. 2012, 18:00

Bon ... bhen j'ai trouvée la solution...
C'est caca !! Mais ça fonctionne :
@$reccords = $this->refdata->getRecords();
@$reccord = $reccords[$recNumber];
J'ai ajouté des @ :cry:

Re: Using $this when not in object context...

par kissphp » 17 juil. 2012, 14:22

Je ne sais pas si ça va aider car je fais appèle à des fonctions d'une Bibliothèque Filemaker ; qui n'a rien de standard.

Code : Tout sélectionner

class fm_reccord{ private $refdata; public function __construct(FileMaker_Result& $data) { $this->refdata=&$data; return NULL; } public function __destruct() { return NULL; } public function getValue($recNumber=0, $fieldName='recid', $repetition=0){ $reccords = $this->refdata->getRecords(); $reccord = $reccords[$recNumber]; if($recNumber >= $this->refdata->getFetchCount()) return NULL; else if($fieldName=='recid') return $reccord->getRecordId(); else return $reccord->getField($fieldName,$repetition); } public function printValue($recNumber=0, $fieldName='recid', $repetition=0){ echo fm_reccord::getValue($recNumber, $fieldName, $repetition); } }

Re: Using $this when not in object context...

par xTG » 17 juil. 2012, 13:40

Je vois pas de problème. :/
Tu pourrais nous faire un copier/coller de ta class qu'on puisse effectuer des tests ?

Using $this when not in object context...

par kissphp » 17 juil. 2012, 12:46

Bonjour,

Je débute et j'ai un bug que je n'arrive pas à comprendre.

Sur l'image il y a la classe appelée, sa méthode et le message d'erreur.

Image

La classe est appelée avec le code suivant :

Code : Tout sélectionner

$reccord = new fm_reccord($data); $_SESSION[EDIT_RECID]=$reccord->getValue(0,'recid');
J'ai beau tourner le problème dans tous les sens pas moyen de trouver ce qui bloque.

Si je remplace le contenu de la méthode par "$newrefdata=& $this->refdata; return 'DEBUG';"
J'ai le même message d'erreur.
Pourtant un var_dump de $this->refdata fonctionne parfaitement et affiche bien le contenu de $data.

Merci d'avance pour votre aide.

PS : je vais supprimer ce post dans la section débutant...