Précédent   Forum des professionnels en informatique > PHP > Langage > Syntaxe
Syntaxe Forum d'entraide sur la syntaxe de PHP et la POO. Avant de poster -> FAQ syntaxe, Cours d'initiation et cours de POO
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 23/05/2011, 19h12   #1
Membre à l'essai
 
Anthony Boulmier
Inscription : mars 2011
Messages : 24
Détails du profil
Informations personnelles :
Nom : Anthony Boulmier

Informations forums :
Inscription : mars 2011
Messages : 24
Points : 23
Points : 23
Par défaut Problème : return true de méthode privée

Salut à tous !
Petit problème avec un retour de méthode privée. Je vous montre le code
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
const recovery = 'filename.ini';
/*...*/		
private function searchCurrentInstallation($path)
{
	$tab_file = scandir($path,0); //open the path and return all file and directory in it
	for($i=2;$i<count($tab_file);$i++) //start at 2 because there's the object .(full return) and ..(return)
	{
		if(is_dir($path."/".$tab_file[$i])) //if the current object is a directory
		{
		      $this->searchCurrentInstallation($path."/".$tab_file[$i]); //recall the function
		}elseif($tab_file[$i] == self::recovery) //if the file is the recovery
			return TRUE; //return true
	}
	return FALSE; // if no recovery found return false
 
}
Cette fonction marche, lors du débugging j'arrive à die("found") lors du test avec mon self::recovery.

Cependant, lorsque le test s'avère positif, aucun retour n'est effectué.

Ps: le but de cette fonction est de parcourir tout le dossier $path (fichier et sous dossier) et de trouver un éventuel 'filename.ini'.
Auriez-vous une idée ?
Merci, bisous
xetqL est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/05/2011, 23h22   #2
Expert Confirmé
 
Avatar de rawsrc
 
Homme Martin
Dev indep
Inscription : mars 2004
Messages : 1 461
Détails du profil
Informations personnelles :
Nom : Homme Martin
Âge : 35
Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

Informations professionnelles :
Activité : Dev indep

Informations forums :
Inscription : mars 2004
Messages : 1 461
Points : 2 548
Points : 2 548
Envoyer un message via Skype™ à rawsrc
Salut

Il existe plus simple avec php pour faire ce que tu souhaites en utilisant la SPL :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<?php
 
$dirStart  = 'path' . DIRECTORY_SEPARATOR . 'to a directory';
$directory = new RecursiveDirectoryIterator($dirStart);
$iterator  = new RecursiveIteratorIterator($directory);
 
foreach($iterator as $elem) {
   if ($elem->getFilename() == 'filename.ini') {
      # fichier trouvé
   } else {
      # fichier non trouvé
   }
}
 
?>
Pour le bisou on va attendre encore un peu
__________________
# Dans la Création, tout est permis mais tout n'est pas utile...
rawsrc est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/05/2011, 23h48   #3
Membre à l'essai
 
Anthony Boulmier
Inscription : mars 2011
Messages : 24
Détails du profil
Informations personnelles :
Nom : Anthony Boulmier

Informations forums :
Inscription : mars 2011
Messages : 24
Points : 23
Points : 23
Par défaut ^^

Le but de mon projet personnel étant de faire un maximum de chose de mes propres mains, à l'artisanal, je me permet de refuser ta solution.

Je réitère donc ma question ^^ Ne voyant pas ce qui ne marche pas, j'appelle à l'aide !

xetqL est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/05/2011, 01h18   #4
Membre à l'essai
 
Anthony Boulmier
Inscription : mars 2011
Messages : 24
Détails du profil
Informations personnelles :
Nom : Anthony Boulmier

Informations forums :
Inscription : mars 2011
Messages : 24
Points : 23
Points : 23
Problème résolu par moi même.
Solution :
- Cette fonction étant récursive, le fait de retourner vrai ne stoppera pas complètement la fonction. Cela, retournera vrai pour la fonction recrée avec les paramètres modifiés (Ne connait pas le therme exact).

Enfin, pour pouvoir traiter le return true, il faut avoir une porte de sortie dans la fonction afin de pouvoir, si un retour est effectué d'être traiter de la manière appropriée.

Merci !
xetqL est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/05/2011, 01h31   #5
Expert Confirmé
 
Avatar de Séb.
 
Inscription : mars 2005
Messages : 2 823
Détails du profil
Informations personnelles :
Âge : 34
Localisation : France

Informations professionnelles :
Secteur : High Tech - Opérateur de télécommunications

Informations forums :
Inscription : mars 2005
Messages : 2 823
Points : 3 449
Points : 3 449
Le pb est que tu ne traites pas le résultat de l'appel récursif à la méthode searchCurrentInstallation : un TRUE ne sera jamais remonté de la pîle d'exécution.

EDIT : grilled, voilà ce que ça fait de divaguer à droite à gauche
__________________
Un problème exposé clairement est déjà à moitié résolu
Keep It Smart and Simple
Séb. est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/05/2011, 15h16   #6
Membre à l'essai
 
Anthony Boulmier
Inscription : mars 2011
Messages : 24
Détails du profil
Informations personnelles :
Nom : Anthony Boulmier

Informations forums :
Inscription : mars 2011
Messages : 24
Points : 23
Points : 23
Merci, mais avec un peu de réflexion, j'avais réussi à répondre à ma question !
Merci de ta réponse en tout cas !
xetqL est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/05/2011, 15h34   #7
Membre Expert
 
Avatar de Djakisback
 
Inscription : février 2005
Messages : 1 791
Détails du profil
Informations forums :
Inscription : février 2005
Messages : 1 791
Points : 1 681
Points : 1 681
Salut,
pour information, en général on évite d'appeler count() à chaque tour de boucle dans une itération car si je ne me trompe pas la taille d'un Array n'est pas récupérable directement en PHP. Cela n'aura sans doute pas d'impact sur ta méthode mais peut-être sur d'autres développements futurs :
Code :
1
2
3
4
5
6
 
// Appel et calcul à chaque itération
for($i=2;$i<count($tab_file);$i++) 
 
// Un seul appel et calcul
for($i=2, $c = count($tab_file);$i< $c;$i++)
Djakisback est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/05/2011, 18h12   #8
Membre à l'essai
 
Anthony Boulmier
Inscription : mars 2011
Messages : 24
Détails du profil
Informations personnelles :
Nom : Anthony Boulmier

Informations forums :
Inscription : mars 2011
Messages : 24
Points : 23
Points : 23
Si, la taille d'un array est récupérable directement en PHP, le seul problème lorsqu'on appelle un count dans une boucle, c'est que l'on ne l'optimise pas.

En effet, la taille sera recalculée à chaque tour, ce qui n'est pas très optimisé.
Le mieux est de calculer la taille avant de rentrer dans la boucle.
xetqL est déconnecté   Envoyer un message privé Réponse avec citation 01
Vieux 24/05/2011, 18h29   #9
Membre Expert
 
Avatar de Djakisback
 
Inscription : février 2005
Messages : 1 791
Détails du profil
Informations forums :
Inscription : février 2005
Messages : 1 791
Points : 1 681
Points : 1 681
Citation:
Envoyé par xetqL Voir le message
Si, la taille d'un array est récupérable directement en PHP, ...
Tu fais comment pour avoir la taille sans appeler count() ?
Car count() semble tout recalculer et pas simplement lire une variable "size" ou "length" qui serait stockée dans la structure interne PHP Array et mise à jour à chaque insertion suppression dans le tableau.
Djakisback est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/05/2011, 21h49   #10
Membre à l'essai
 
Anthony Boulmier
Inscription : mars 2011
Messages : 24
Détails du profil
Informations personnelles :
Nom : Anthony Boulmier

Informations forums :
Inscription : mars 2011
Messages : 24
Points : 23
Points : 23
C'est ce que j'ai dis :
Citation:
...la taille sera recalculée...
Donc effectivement, la différence d'optimisation vient du fait qu'exécuter une fonction à chaque tour de boucle est forcément moins bon que de le faire une fois pour toute une boucle...

Mais cela, tu l'avais compris
xetqL est déconnecté   Envoyer un message privé Réponse avec citation 01
Vieux 24/05/2011, 22h29   #11
Membre Expert
 
Avatar de Djakisback
 
Inscription : février 2005
Messages : 1 791
Détails du profil
Informations forums :
Inscription : février 2005
Messages : 1 791
Points : 1 681
Points : 1 681
En fait, il y a deux choses différentes à prendre en compte, l'appel de la fonction et l'exécution du corps de la fonction en lui-même.
Après vérification dans les sources de la 5.3.6 effectivement le nombre d'éléments est stocké dans la HashTable et donc count() ne recalcule pas la taille.
Je ne pensais pas que l'appel d'une fonction aussi simple (un getter évolué) pouvait jouer comme ça sur les perfs, j'en ai toujours déduit que la taille était recalculée
Djakisback est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/05/2011, 00h05   #12
Membre à l'essai
 
Anthony Boulmier
Inscription : mars 2011
Messages : 24
Détails du profil
Informations personnelles :
Nom : Anthony Boulmier

Informations forums :
Inscription : mars 2011
Messages : 24
Points : 23
Points : 23
Pareil pour moi ^^ Merci de ta recherche et de l'info !
xetqL est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 13h59.


 
 
 
 
Partenaires

Hébergement Web