Я хочу создать функцию в PHP и вызвать ее, не зная имя функции.
Это возможно?
Пример:
<?php $functionName = "someName"; $this->$functionName(); function someName(){ echo("Print Message"); } ?>
Похоже, вы хотите call_user_func()
.
$functionName = "someName"; call_user_func($functionName); //calls `someName()`
Может использоваться следующим образом, где вывод представляет собой напечатанное сообщение «Hello, World!»:
function someName($val){ return $val; } $functionName = "someName"; echo call_user_func($functionName, "Hello, World!");
Примечание. Если вы используете более новые версии PHP, вы также можете использовать вызовы, как @ J.Bruni отметил:
$functionName = "someName"; $functionName(); //also calls `someName()`
Да, это просто:
$functionName();
Тем не менее, у вас есть несколько других вариантов, позволяющих более сложные вещи. Пожалуйста, проверьте:
http://php.net/manual/en/language.types.callable.php
Примеры:
function test() { echo 'hello 1'; } class Something { function test() { echo 'hello 2'; } } class Other { static function test() { echo 'hello 3'; } } $functionName = 'test'; $object = new Something(); $className = 'Other'; // three ways to call function "test", showing how to pass parameters $functionName($param1, $param2); call_user_func($functionName, $param1, $param2); call_user_func_array($functionName, array($param1, $param2)); // two ways to call "Something::test" $object->$functionName(); call_user_func(array($object, $functionName)); // a way to call "Other::test" call_user_func(array($className, $functionName));
Важно: вам нужно объявить функцию перед ее вызовом. (В вашем вопросе вы объявляете функцию после попытки ее вызова. Это не работает.)
Чтобы избежать ошибок, вы можете использовать функцию is_callable
для проверки возможности is_callable
функции / метода до ее фактического вызова.
call_user_func () решает ваши проблемы!
$function = 'myOwnFunction'; call_user_func( $functionname );
и чтобы избежать фатальных ошибок, вы
function_exists($function);
с этим!