2010-01-01 3 views
0

je me rends compte que « eval » remplit largement le rôle de la fonction #define C++, mais comment pourrais-je faire quelque chose comme ça en PHP:C++ #define en PHP

#define D(x,y) if (N==x) return(y); else { 
void Sample(int N) { 
    D(3) 
    D(4) 
     D(22) 
    } 
    } 
} 

Mon problème est que eval (» return; ") reviendra juste d'eval, pas de la routine d'appel. Mon autre problème est le paramétrage de la macro.

+7

Ma principale préoccupation est la suivante: Pourquoi voudriez-vous le faire en C++? C'est terriblement obscurci. – Tordek

+2

En outre, votre macro nécessite deux paramètres et vous lui passez un. – Tordek

Répondre

1

Vous pourriez probablement utiliser un préprocesseur (vous auriez besoin de l'écrire vous-même) qui remplace la macro dans votre code. Cependant, je ne vois pas pourquoi vous auriez besoin d'utiliser de telles choses - y a-t-il quelque chose de mal à définir une fonction et à l'utiliser?

1

Macro en PHP ou dans tout autre langage qui ne nécessite pas de compiler le code source (comme ASP) sont inutiles. Les macros ont été créées en C/C++ pour améliorer les performances, mais dans des langages comme PHP elles ne feraient que diminuer les performances. Ils ont du sens dans des langages comme C/C++ parce que le code source de votre application est premièrement pré-traité par le préprocesseur C qui convertit la macro en code, que le code est compilé dans une application de travail monolithique autonome (avec extension .exe). Chaque fois que l'application .exe est appelée, les macros ne sont pas réexpédiées car elles ont déjà été remplacées avant la complication, ce qui améliore la vitesse de l'application.

En PHP, le code source de votre script n'a pas besoin d'être compilé en premier pour fonctionner. Comme vous le savez, vous placez le code source de vos fichiers PHP directement sur le serveur, et ce dernier prend soin de compiler et de l'exécuter à la volée sur chaque requête client. Il serait donc inutile pour un serveur de préprocéder une macro et de la convertir en code, puis de traiter à nouveau tout le code. Cela entraînerait les pires performances car il faudrait lire le code source deux fois.

Ils ont également ouvert une nouvelle demande de fonctionnalité dans le site officiel des bogues PHP.

http://bugs.php.net/bug.php?id=46017

Mais, évidemment, il a été fermé comme "Will not fix" !!!