Question

En fait, ce que je veux savoir est, pour le second paramètre dans la fonction create_function, est de toute façon de passer une chaîne sans un point-virgule? Ou bien ne pas fonctionner.

exemple:

taken from php.net
create_function('$a,$b', 'return "CRCs: " . crc32($a) . " , ".crc32(b);'),

avis qu'il ya un point-virgule dans la chaîne. est-il quelqu'un voie possible peut entrer dans une fonction sans un point-virgule, qui va encore fonctionner / évaluer?

Était-ce utile?

La solution

Non, il est impossible. PHP est un point-virgule sensible, que vous devez l'utiliser pour mettre fin à toutes les déclarations avant accolades droite. J'ai même essayé la fonction régulière comme ceci:

function f() {
  return 1
}

et il crachera une erreur de syntaxe, contrairement à JavaScript.

Autres conseils

Avec create_function () vous créez une fonction anonyme. Le deuxième paramètre est une chaîne qui est le code de la fonction (comme toute autre fonction que vous écririez). Il ne doit pas se terminer par un point-virgule, par exemple:

$coolfunction = create_function('$thing', 'if ($thing > 0) {return "Yes"; } else { return "no!"; }');

echo $coolfunction(1) . ' and ' . $coolfunction(-1);

se termine par un « } » et imprime: Oui et non

Vous devriez toujours désinfectez toute entrée d'utilisateur avant de l'utiliser. Je suggère que vous regardez le point-virgule dans l'entrée de l'utilisateur, s'il manque, l'ajouter.

Si l'utilisateur peut saisir quoi que ce soit ici vous avez encore un problème s'il entre un nom de fonction non valide ou tout simplement des déchets.

Vous pouvez valider avec preg_match () (bien que je suis pas un expert sur preg donc je vais laisser quelqu'un d'autre vous aider là-bas).

D'abord, pourquoi avez-vous? C'est une façon vraiment sale pour créer une fonction. Espoir parce que vous voulez faire une interface où les gens peuvent créer directement une fonction (et ce sera seulement pour vous ou ce sera un gros problème de sécurité). Je ne comprends pas vraiment comment vous voulez utiliser.

Quoi qu'il en soit, pour vous interroger, vous n'avez pas se soucier si cela fonctionne ou non. Je veux dire, le test juste si elle fonctionne, sinon il suffit de mettre par vous-même un point-virgule. Il est juste un simple test sur une chaîne.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top