12
votes

Puis-je utiliser des noms réservés à PHP pour mes fonctions et mes classes?

J'aimerais créer une fonction appelée "nouvelle" et une classe appelée "cas".

Puis-je faire cela dans PHP?


7 commentaires

Pourquoi voulez-vous vous confondre?


Faites-vous une faveur et ne faites pas cela.


Je voulais faire cela parce que je fais un site web avocat et je veux avoir des modèles nommés "cas" et en eux une fonction "nouvelle" qui créera un nouveau cas


Non, maintenant pourquoi voulez-vous attribuer des noms comme ceux-ci plutôt que des noms de classe et de classe plus sensibles?


Vous ne pouvez pas, et avec une très bonne raison.


Ok ok .. je l'obtiens .. je ne peux pas :)


Dupliquer possible de est-il possible de" échapper à "un nom de méthode dans PHP, de pouvoir avoir un nom de méthode qui s'afframe avec un mot-clé réservé?


6 Réponses :


29
votes

vous ne peut pas . Dieu merci.


7 commentaires

Il pourrait être assez utile, par exemple, regardez les contrôleurs de rails


@Alexcp: Cela pourrait être très utile si votre objectif est de manquer votre codeBase, confondez les surligneurs de syntaxe de chacun et conduisez vos collègues développeurs insensés.


@Alexcp: Je voulais faire cela dans CodeDigniter, imiter mes contrôleurs de rails. J'ai appelé mes méthodes de contrôleur NEW_ () et acheminées * / Nouveau sur mes méthodes nouvelles_ (): $ route ['(a-za-z _.-] +) / (nouveau)'] = "$ 1 / nouveau_";


@Josef: Je suis désolé de l'entendre.


@LightnessRacsinorbit: Pourquoi? Mes URL ont l'air bien et il faut être facile pour un autre programmeur de voir la corrélation entre l'URL et la méthode sans regarder à travers les règles de routage.


@JosefottStosson: à cause de tout ce que j'ai dit déjà sur l'utilisation de mots-clés réservés comme noms de fonctions. C'est juste le mal. Votre solution de contournement est inutile et désordonnée!


@Lightnessrsinorbit: Mais si vous lisez mon code, c'est exactement ce que j'évite! Et si votre problème est que mon nom de méthode est trop similaire dans vos yeux, changez-le. "Nouveau" fait partie de la route (une exigence que je devais traiter) et des itinéraires de cartes de CodeIntretre contre les méthodes par défaut. J'ai donc changé comment les itinéraires CI Maps, un morceau de code que vous n'aurez jamais à voir lors de la rédaction de vos contrôleurs, de sorte que je fasse pas doit appeler la méthode "nouvelle". Ma "solution de contournement" est propre par rapport à la persuadement de toute une organisation qu'ils devront arrêter de taper "/ post / nouveau", sans parler des URL de casse.



1
votes

Par défaut, il n'est pas possible, ce sont des mots réservés et vous ne pouvez pas les utiliser.

http://www.php.net/manual/fr/Reservé. mots-clés.php

Peut-être que vous pouvez recompiler php ou quelque chose comme ça pour atteindre votre objectif, mais je pense (comme les autres personnes qui vous ont répondu) que ce n'est pas une bonne idée :)

hth!


0 commentaires

2
votes

Vous ne pouvez pas faire cela, une option alternative consiste à simplement utiliser _Case () ou _new () comme noms de fonction

Vérifiez également:

Est-il possible de" échapper à "un nom de méthode en PHP, de pouvoir avoir un nom de méthode qui s'afframe avec un mot clé réservé?


0 commentaires

27
votes

En réalité, tout en définissant une telle méthode entraîne une erreur d'analyse, l'utiliser ne permet pas, ce qui permet une solution de contournement: xxx

a associé demande de fonctionnalité datant de 2004 est toujours ouvert.

Modifier janvier 2016

AS de PHP 7, Il est maintenant possible de nommer vos méthodes à l'aide de mots-clés restreints jusqu'à présent, grâce au Lexer sensible au contexte : xxx

Vous ne pouvez toujours pas nommer votre catégorie case i 'm peur.


3 commentaires

Nous savons tous ce que le Doc actuellement dit, cependant, les discussions sont toujours activées, et toutes les personnes ne sont pas aussi virulentes que vous êtes sur ce sujet. Le fait est qu'il existe actuellement une incohérence entre une erreur d'analyse soulevée lorsqu'un procédé est défini avec un mot-clé réservé, tout en utilisant ce nom de méthode ne soulève aucune erreur. Par conséquent, ce type d'utilisation de mots-clés réservés pourrait très bien être autorisé à l'avenir, car le contexte dans lequel ils sont utilisés les rend distinguables de leur signification originale, du point de vue de l'analyseur.


cellog@php.net a même fourni un patch comme une preuve de concept (cf. le lien de ma réponse) et donne une dispute sur la raison pour laquelle le comportement actuel peut parfois être problématique: "Alors que de nouveaux mots réservés sont introduits, ils ont tendance à s'affronter avec les noms de méthodes de classe existants ». Je ne dis pas que c'est la voie à suivre, mais je pense que c'est bien de garder un esprit ouvert.


Oui, ils pourraient être autorisés à l'avenir. De même, ils ne peuvent jamais être autorisés à l'avenir. Cela peut devenir une erreur d'analyse à l'avenir. "Garder un esprit ouvert" implique de préparer des scénarios , ce qui signifie suivre les dictateurs de la langue au mieux de vos capacités.



0
votes

Dans le sens de ce que Benjamin a mentionné, il existe une utilisation intéressante de "clone", (qui est réservé) dans ce classe , ligne 545 xxx


0 commentaires

0
votes

Je viens de renommé la classe sur le point de venir mon problème.

foreach($array as $key => $line){
    if($key == "resource"){
        $key = "resources";
        $array->$key = $line;
    }
}


0 commentaires