Fonction rassemble goto en php

sbsouba Messages postés 10 Date d'inscription mardi 16 octobre 2012 Statut Membre Dernière intervention 16 octobre 2012 - 1 avril 2008 à 14:27
coucou747 Messages postés 12303 Date d'inscription mardi 10 février 2004 Statut Membre Dernière intervention 30 juillet 2012 - 1 avril 2008 à 18:29
bonjour a tous je savais qule la fonction goto n'exicte pas dans php mon question s'il ya une autre fonction qui rassemble .merci d'avance .rep moi svp slut


 

3 réponses

coucou747 Messages postés 12303 Date d'inscription mardi 10 février 2004 Statut Membre Dernière intervention 30 juillet 2012 44
1 avril 2008 à 15:15
salut
goto arrivera probablement en php6.

c'est pas une instruction utile habituellement... dijkstra (auteur d'un algo de recherche de plus court chemin), a un jours ecrit un livre qui expliquait pourquoi on ne doit pas utiliser les gotos

/**
* @author coucou747 <coucou747@hotmail.com>
* @see irc://cominweb.uni-irc.net/#programmation
*/
0
malalam Messages postés 10839 Date d'inscription lundi 24 février 2003 Statut Membre Dernière intervention 2 mars 2010 25
1 avril 2008 à 18:03
Hello,

en attendant php6, pour t'aoder à t'en passer dis-nous pourquoi tu aurais besoin d'un goto?
0
coucou747 Messages postés 12303 Date d'inscription mardi 10 février 2004 Statut Membre Dernière intervention 30 juillet 2012 44
1 avril 2008 à 18:29
on aurait de mulitples raisons d'avoir besoin d'un goto :)

je code un script, php-recode qui doit transformer une fonction php codee en tail-rec, en fonction non recursive.

<?php

function sub_f ($a, $b){
    if ($a==0) return $b;
    else{return sub_f($a-1, $a+$b);}
}
function sumOfNaturals($n){
    return sub_f($n, 0);
}
echo sumOfNaturals(50000);
?>

si tu mets ca sur un serveur web, apache va te demander de telecharger la page...
en C, compile avec -O2, en ocaml, en Cpp, ca ne plantera pas.... en php, ca segfault...

alors que c'est un exemple qu'on peut ecrire de plein de facons :

<?php

function sub_f ($a, $b){
   start:
    if ($a==0) return $b;
    else{
         $arg0=$a-1;
         $arg1=$a+$b;
        $a=$arg0; $b=$arg1;
        goto start;
   }
}

function sumOfNaturals($n){
    return sub_f($n, 0);
}

la solution avec un while, for ou autre est aussi faisable dans cet exemple, mais pas generalisable (domage, ca ferait un code super joli ;( )

for ($i=0, $j=0;$i<10;$i++, $j+=3){
    echo "$i test $j
";
    echo "$i";
}
echo sumOfNaturals(50000);
?>

Avant de faire ca, faut pouvoir detecter les fonctions tail-rec, donc parser du php :) c'est pas simple... mais jme suis appercu qu'on pouvait pas en php a cause du manque de goto, quand j'etais presque pres du but.... Cependant, si t'as une solution elegante pour ce genre de problemes, je suis pour...
/**
* @author coucou747 <coucou747@hotmail.com>
* @see irc://cominweb.uni-irc.net/#programmation
*/
0
Rejoignez-nous