Page 1 sur 1

PHP Fatal error: Can't use method return value in write con

Posté : 05 nov. 2009, 16:13
par devcphp
PHP Fatal error: Can't use method return value in write context

Bonjour à tous

tout est dans le titre concernant mon probleme :
Voici le code qui me cause ce souci:
function  SetMetaInfoWord (COM $oWord, $aMetaTransmis){

	$aMetaInfoPossible = array ('Title','Subject','Author','Manager','Company','Category','Application Name','Keywords','Comments');
	if ( FALSE === is_object($oWord) AND FALSE === ($oWord instanceof COM)){
		wb_message_box($window,'Les informations Meta Ne peuvent etre transmis  sans instanciation de word','Erreur Code Word',WBC_WARNING);
	
	}elseif ( extract($aMetaTransmis) !== '9'){  // int extract() 
		
		static $sArgManquant='';
		//array diff nous renverra un tableau (ici forcement à une dimension ) avec les valeurs manquantes
		foreach(array_diff($aMetaTransmis,$aMetaInfoPossible) as $sValeur){
			$sArgManquant.= $sValeur;
		}
		wb_message_box($window,'Le ou les arguments '.$sArgManquant.' n\'ont pas été transmis lors de l\'appel à la fonction','Erreur Code Word',WBC_INFO);
		unset($sArgManquant);


	}elseif ( TRUE === in_array($aMetaTransmis,$aMetaInfoPossible)){
		// on est supposé avoir autant avoir de valeurs dans chacun des tableaux , on crée donc un tableau contenant les clefs definies dans le tableaux des meta possibles auxquelles correspondent les valeurs contenu dans le tableau des meta transmis
		
	foreach (array_combine($aMetaInfoPossible,$aMetaTransmis) as $sClef=>$sValue){
			$oWord->ActiveDocument->BuiltInDocumentProperties($sClef) = $sValue;
		}
		unset ($aMetaTransmis);

	}
}// fin de notre fonction
la ligne de fatal erreur concernen ma boucle foreach.
J'ai essayé de passer par une variable tel que

$aMaVariable = array_combine ...
puis foreach ( $aMaVariable ...

Mais l'erreur ne vient pas de la .

Merci de votre aide

Re: PHP Fatal error: Can't use method return value in write con

Posté : 05 nov. 2009, 17:08
par mojorisin
C'est typequement le genre d'eereur lors d'un test avec empty() quand on lui passe en parametre le retour d'une fonction (dans ton cas une méthode de classe) :
if(empty(mafonction()) // Fatal error: Can't use function return value in write context

Re: PHP Fatal error: Can't use method return value in write con

Posté : 05 nov. 2009, 17:14
par devcphp
Comment expliqué alors que lorsque je passe par une variable tierce afin de recevoir le contenu de ma fonction , cela ne marche toujours pas.

Peux tu ettayé d'avantage tes propos?

merci

Re: PHP Fatal error: Can't use method return value in write con

Posté : 05 nov. 2009, 18:37
par mojorisin
Je n'ai pas dis que c'étais systématiquement un probleme venant de cela, c'est une piste à vérifier.
En fait empty n'acepte pas l'évaluation d'un retour de fonction directement:
if(empty(maFonction())) // erreur

$ret = maFonction();
if(empty($ret)) // ok

Dans ton cas c'est un problème avec une méthode donc peut être une évalutaion à l'aide de empty en appelant directement la méthode en argument.
Donc peut-etre un code comme cela dans ta classe :
if(empty($this->maFonction())) // Fatal error: Can't use method return value in write context

Essais de mettre en place un gestionnaire d'erreur afin d'afficher la pile des appels :
Voir les fonction php set_error_handler() et debug_print_backtrace()

Re: PHP Fatal error: Can't use method return value in write con

Posté : 06 nov. 2009, 10:23
par devcphp
je vais suivre ses pistes la et etudiait ce que la pile me renvoit comme erreur.Merci

Re: PHP Fatal error: Can't use method return value in write con

Posté : 09 nov. 2009, 08:24
par Hywan
Hey :-),

Ça s'explique facilement par le fait que empty() n'est pas une fonction du langage mais une structure du langage.
J'ai donné plus d'informations dans un tutoriel : isset, empty et is_nulls sont sur un bateau, voir la section Structures du langage versus fonctions natives : prestissimo.