Page 1 sur 1

[R] équivalent de __FUNCTION__ en PHP?

Posté : dim. 14 nov. 2010 10:51
par pitibalrog
Bonjour,

Je tenais d'abord pour mon premier message à remercier les responsables de ce site qui m'a déjà grandement aider pour commencer avec AutoIt! :D

Ma question est simple: existe t'il une constante prédéfinie équivalente à __FUNCTION__ en PHP :?:
Pour plus d'info: http://php.net/manual/fr/language.const ... efined.php

J'ai bien trouvé des macros comme @ScriptLineNumber, mais pas ce que je cherche.

Merci d'avance pour vos réponses

Re: [..] équivalent de __FUNCTION__ en PHP?

Posté : dim. 14 nov. 2010 17:17
par timmalos
Ceci n'existe pas à première vue, mais quelle est l'utilité souhaitée? Que voulez vous faire? Je suis sur qu'il existe un équivalent en fonction de votre problème.

Re: [..] équivalent de __FUNCTION__ en PHP?

Posté : dim. 14 nov. 2010 18:05
par pitibalrog
Merci pour ta réponse, et c'est bien ce que je "redoutais".

Je souhaite utiliser ce type de variable pour mes logs de debug.

Re: [..] équivalent de __FUNCTION__ en PHP?

Posté : dim. 14 nov. 2010 18:21
par Tlem
Je n'ai pas cherché dans la doc si une telle variable existe, mais le plus simple serait sans doute de gérer vous même cette partie.
Avant de lancer la fonction vous initialisez une variable avec le nom de celle-ci, puis vous la 'libérez' ou modifiez en sortie de fonction. Comme cela, la variable contient le nom de la fonction qui l'a initialisée. ;)

Re: [..] équivalent de __FUNCTION__ en PHP?

Posté : dim. 14 nov. 2010 19:47
par timmalos
Ou encore, en reprenant le format des UDFs d'Autoits:

Code : Tout sélectionner

Func _VotreFonction($sAction, $vOption = "")
    Local Const $sFuncName = "_VotreFonction"
        ;Traitement...
    SetError(__FFError($sFuncName, "$sAction: " & $sAction))
EndFunc

Func __FFError($sWhere, Const ByRef $i_FF_ERROR, $sMessage = "")
    Local $sOut, $sMsg
    Sleep(200)

    Switch $i_FF_ERROR
        Case $_FF_ERROR_Success
            Return $_FF_ERROR_Success
        Case $_FF_ERROR_GeneralError
            $sOut = "General Error"
        Case $_FF_ERROR_SocketError
            $sOut = "Socket Error"
        Case $_FF_ERROR_InvalidDataType
            $sOut = "Invalid data type"
        Case $_FF_ERROR_InvalidValue
            $sOut = "Invalid value"
        Case $_FF_ERROR_Timeout
            $sOut = "Timeout"
        Case $_FF_ERROR_NoMatch
            $sOut = "No match"
        Case $_FF_ERROR_RetValue
            $sOut = "Error return value"
        Case $_FF_ERROR_SendRecv
            $sOut = "Error TCPSend / TCPRecv"
        Case $_FF_ERROR_ReplException
            $sOut = "MozRepl Exception"
        Case $_FF_ERROR_SendRecv
            $sOut = "Error TCPSend / TCPRecv"
        Case $_FF_ERROR_InvalidExpression
            $sOut = "Invalid Expression"
    EndSwitch
    If $sMessage = "" Then
        $sMsg = $sWhere & " ==> " & $sOut & @CRLF
        ConsoleWriteError($sMsg)
        If @Compiled Then
            If $_FF_ERROR_MSGBOX And $i_FF_ERROR < 6 Then MsgBox(16, "FF.au3 Error:", $sMsg)
            DllCall("kernel32.dll", "none", "OutputDebugString", "str", $sMsg)
        EndIf

    Else
        $sMsg = $sWhere & " ==> " & $sOut & ": " & $sMessage & @CRLF
        ConsoleWriteError($sMsg)
        If @Compiled Then
            If $_FF_ERROR_MSGBOX And $i_FF_ERROR < 6 Then MsgBox(16, "FF.au3 Error:", $sMsg)
            DllCall("kernel32.dll", "none", "OutputDebugString", "str", $sMsg)
        EndIf
    EndIf

    Return $i_FF_ERROR
EndFunc   ;==>__FFError
 

Re: [..] équivalent de __FUNCTION__ en PHP?

Posté : dim. 14 nov. 2010 19:48
par Tlem
C'est en image code, ce que j'ai dit en texte. :P

Re: [..] équivalent de __FUNCTION__ en PHP?

Posté : dim. 14 nov. 2010 20:00
par timmalos
Absolument ;) Mon 'Ou encore' n'est pas bien choisi, mais il voulait dire : Voila ce que veut dire Tlem :lol:

Re: [..] équivalent de __FUNCTION__ en PHP?

Posté : dim. 14 nov. 2010 20:22
par pitibalrog
Merci pour vos réponses, c'est tout à fait ce que j'avais en tête, mais bon j'ai tellement l'habitude d'utiliser __FUNCTION__ que je voulais savoir si ça existait.

De plus avec __FUNCTION__ ça évite les copier coller malheureux où j'aurais oublié de changer le nom de la fonction.

Donc au final c'est bien ce que je vais faire: utiliser une variable en début de fonction. Et si je voulais le faire carrément laid je pourrais même déclarer cette variable en global et l'utiliser directement dans les fonctions de log sans avoir à la passer en paramètre... :|

Bonne fin de WE à vous! :mrgreen:

Edit: C'est bien R qu'on doit mettre entre [] pour dire que le sujet est résolu?

Re: [R] équivalent de __FUNCTION__ en PHP?

Posté : dim. 14 nov. 2010 21:50
par Tlem
Oui pour [R].

Ensuite, le fait de déclarer la variable en global, ne fait pas d'elle quelque chose de laid !!!
Au contraire, cela me semblerais plutôt judicieux, car vous pourriez l'utiliser dans une autre partie du code en dehors des fonctions. ;)

Re: [R] équivalent de __FUNCTION__ en PHP?

Posté : mar. 16 nov. 2010 13:15
par Iste
Le Global c'est moche dans des langages objets.
En Autoit on a aucun autre moyen de gérer la persistances des donnée entre deux instructions, si ce n'est en utilisant les Global.
Ce qui est laid, c'est d'utiliser des globals pour passer des parametres, ou autre vilaines chose qu'on peut faire avec le langage

Re: [R] équivalent de __FUNCTION__ en PHP?

Posté : mar. 16 nov. 2010 13:57
par pitibalrog
Je ne pensais pas trouvé un front de soutient pour les variables globales ;-)

D'ailleurs savez vous si il y a un autoit objet prévu pour une prochaine version?

Rassurez vous j'utilise aussi des variables globales qui sont en effet indispensables dans certains cas comme le disait Iste. En ce qui concerne ce cas précis de __FUNCTION__ pour mes logs, je trouve quand même plus propre de le passer en paramètre que de l'utiliser en globale. Après du moment que ça fonctionne ... :)

Re: [R] équivalent de __FUNCTION__ en PHP?

Posté : mar. 16 nov. 2010 14:15
par Iste
Je ne pense pas qu'une version objet d'autoit soit prévue, cela allant a l'encontre du principe de ce langage qui est avant tout la simplicité.
Apres, il faut savoir que, tout comme JS a ses débuts, autoit sais utiliser des objets, on ne peut juste pas en créer.

Sinon, rien ne vous empeche de créer un pré-compilateur pour le faire devenir objet ;)

Plus réalisable, vous pouvez créer un pré-compilateur qui setterait la global utilisé automatiquement a chaque début de fonction.

Re: [R] équivalent de __FUNCTION__ en PHP?

Posté : mar. 16 nov. 2010 16:41
par pitibalrog
Un pré-compilateur? Je ne connaît pas ... il va falloir que je me renseigne.

Merci pour l'indice :idea:

Re: [R] équivalent de __FUNCTION__ en PHP?

Posté : mar. 16 nov. 2010 16:59
par Iste
Il s'agit d'un script qui va lire vautre script et le modifier.
En gros, il faudrait remplacer les

Code : Tout sélectionner

Function nomDeLafonction()
par des

Code : Tout sélectionner

Function nomDeLafonction()
$MAGLOBAL = "nomDeLafonction"
et rajouter une déclaration de $MAGLOBAL au début.

Si vous voulez essayer, penchez vous sur StringRegExpRemplace()

Re: [R] équivalent de __FUNCTION__ en PHP?

Posté : mar. 16 nov. 2010 17:49
par matwachich
Hey Iste, pourquoi faire simple quand on peut faire compliqué!!!
Il suffit d'ajouter une abréviation genre:

Code : Tout sélectionner

funx =>
Func _()
    Global $__FuncName = ""
EndFunc
Mais il est vrai que un pré-compilateur ça pourrait servir dans des trucs plus compliqué que ça!

Re: [R] équivalent de __FUNCTION__ en PHP?

Posté : mer. 17 nov. 2010 14:22
par pitibalrog
OK, je regarderais ça et à la limite ça me permetra de n'activer ce genre de log qu'au debug :)

Merci :mrgreen: