comportement de include_once

comportement de include_once - PHP - Programmation

Marsh Posté le 20-11-2009 à 14:36:01    

Salut,
 
je viens de constater un comportement surprenant de PHP. Et je suis assez friand d'explications!!
 
 
j'ai un fichier a.php :
 

Code :
  1. <?php
  2. include_once('b.php');
  3. echo foo();
  4. if(!function_exists('foo')) {
  5.   function foo() {
  6.     $v = 'foo';
  7.     return $v;
  8.   }
  9. }
  10. ?>


 
et dans b.php :
 

Code :
  1. <?php
  2. if(!function_exists('foo')) {
  3.   function foo() {
  4.     $v = 'bar';
  5.     return $v;
  6.   }
  7. }
  8. ?>


 

echo foo();
m'affiche bar.
 
 
Maintenant, je supprime le test qui me permet de savoir si ma fonction existe dans a.php, j'ai donc :
 

Code :
  1. <?php
  2. include_once('b.php');
  3. echo foo();
  4.   function foo() {
  5.     $v = 'foo';
  6.     return $v;
  7.   }
  8. ?>



echo foo();
me renvoie foo!
 
Etonnant, non!
 
 
 


---------------
from here and there -- \o__________________________________ -- la révolution de la terre, en silence
Reply

Marsh Posté le 20-11-2009 à 14:36:01   

Reply

Marsh Posté le 20-11-2009 à 14:40:51    

C'est un comportement normal, défini dans la documentation.
 

Citation :

Les fonctions n'ont pas besoin d'être définies avant d'être utilisées, SAUF lorsqu'une fonction est définie conditionnellement, comme montré dans les deux exemples suivants.
 
Lorsqu'une fonction est définie de manière conditionnelle, comme dans les exemples ci-dessous, leur définition doit précéder leur utilisation.


 
http://www.php.net/manual/fr/funct [...] efined.php


---------------
TRIPS RIGHT BUNCH F SHUTTLE TOM AND JERRY RIGHT YELLOW
Reply

Marsh Posté le 20-11-2009 à 14:46:17    

merci Altherac. :jap:  
 
Je me doute que c'est normal. Il me manquait la référence à la doc. C'est maintenant très clair  :D


---------------
from here and there -- \o__________________________________ -- la révolution de la terre, en silence
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed