PHP create_function, функция без точки с запятой? - PullRequest
0 голосов
/ 14 января 2011

В основном, я хочу знать, что для второго параметра в функции create_function есть ли в любом случае передать строку без точки с запятой? или это не сработает.

пример:

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

обратите внимание, что в строке есть точка с запятой. Есть ли какой-нибудь способ, которым кто-то может ввести функцию без точки с запятой, которая все еще будет запускаться / оценивать?

Ответы [ 4 ]

2 голосов
/ 14 января 2011

С помощью create_function () вы создаете анонимную функцию.Второй параметр - это строка, представляющая собой код функции (как и любая другая функция, которую вы бы написали).Он не должен заканчиваться точкой с запятой, например:

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

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

Заканчивается на '}' и печатает: Да и нет!

1 голос
/ 14 января 2011

Нет, это невозможно. PHP чувствителен к точке с запятой, что вы должны использовать его для завершения всех операторов перед правильными скобками. Я даже попробовал обычную функцию, как это:

function f() {
  return 1
}

и он выдает синтаксическую ошибку, в отличие от JavaScript.

0 голосов
/ 14 января 2011

Во-первых, зачем тебе это? Это действительно грязный способ создания функции. Надеюсь, потому что вы хотите создать интерфейс, где люди могли бы напрямую создавать функцию (и это будет только для вас, или это будет большая проблема безопасности). Я не совсем понимаю, как вы хотите это использовать.

В любом случае, для вашего вопроса, вам не нужно заботиться о том, работает он или нет. Я имею в виду, просто проверь, работает ли он, если не просто поставь точку с запятой. Это просто тест на строку.

0 голосов
/ 14 января 2011

Вы должны всегда дезинфицировать любой пользовательский ввод перед его использованием. Я предлагаю вам искать точку с запятой в пользовательском вводе, если она отсутствует, добавьте ее.

Если пользователь может ввести что-либо здесь, у вас все еще есть проблема, если он вводит недопустимое имя функции или просто мусор.

Вы можете проверить с помощью preg_match () (хотя я не эксперт по preg, поэтому я позволю кому-то еще помочь вам там).

...