Page 1 sur 1

Using $this when not in object context...

Posté : 17 juil. 2012, 12:46
par kissphp
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...

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

Posté : 17 juil. 2012, 13:40
par xTG
Je vois pas de problème. :/
Tu pourrais nous faire un copier/coller de ta class qu'on puisse effectuer des tests ?

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

Posté : 17 juil. 2012, 14:22
par kissphp
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...

Posté : 17 juil. 2012, 18:00
par kissphp
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...

Posté : 17 juil. 2012, 20:00
par momox
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...

Posté : 18 juil. 2012, 07:30
par kissphp
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...

Posté : 18 juil. 2012, 09:14
par xTG
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...

Posté : 18 juil. 2012, 11:39
par kissphp
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...

Posté : 18 juil. 2012, 15:03
par xTG
Bah l'interprétation vérifie les erreurs de syntaxes et bien plus. ;)