Как исказить функцию в PHP?

я лично обнаружил java.lang.Void очень поздний - улучшает удобочитаемость кода в сочетании с дженериками, например, Callable<Void>

53
задан Axel 9 March 2019 в 11:28
поделиться

9 ответов

Нет, но вы можете сделать это:

$wait = 'sleep';
$wait($seconds);

Таким образом вы также решите проблемы с числами аргументов

27
ответ дан 7 November 2019 в 08:16
поделиться

До PHP 5.5

ага, функция ожидания ($ секунды) {сна ($ секунды); } - это правильный путь. Но если вас беспокоит необходимость изменения wait (), если вы измените количество параметров для sleep (), вы можете вместо этого сделать следующее:

function wait() { 
  return call_user_func_array("sleep", func_get_args());
}
62
ответ дан 7 November 2019 в 08:16
поделиться

вы можете использовать расширение runkit

http://us.php.net/manual/en/function.runkit-function-copy.php

5
ответ дан 7 November 2019 в 08:16
поделиться

Нет, функции не первого класса граждане, поэтому нет wait = sleep как, например, Javascript. В основном вам нужно сделать то, что вы задали в своем вопросе:

function wait ($seconds) { sleep($seconds); }
5
ответ дан 7 November 2019 в 08:16
поделиться

нет. способ, которым вы написали, - лучший способ сделать это.

1
ответ дан 7 November 2019 в 08:16
поделиться

Вы также можете посмотреть лямбды , если у вас PHP 5.3

$wait = function($v) { return sleep($v); };
21
ответ дан 7 November 2019 в 08:16
поделиться

Нет, быстрого способа сделать это нет - по крайней мере, для всего, что было до PHP v5.3, да и делать это тоже не очень хорошая идея. Это просто усложняет дело.

1
ответ дан 7 November 2019 в 08:16
поделиться

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

Если вам это действительно действительно нужно, вы можете написать расширение PHP , которое сделает это за вас. Однако для использования расширения вам необходимо скомпилировать свое расширение и настроить PHP для использования этого расширения, что означает, что переносимость вашего приложения будет значительно снижена.

6
ответ дан 7 November 2019 в 08:16
поделиться

Если вас не беспокоит использование инструкции "eval" PHP (с которой у многих людей есть реальные проблемы, но у меня нет), то вы можете использовать что-то вроде этого:

function func_alias($target, $original) {
    eval("function $target() { \$args = func_get_args(); return call_user_func_array('$original', \$args); }");
}

Я использовал это в некоторых простых тестах, и это, кажется, работает довольно хорошо. Вот пример:

function hello($recipient) {
    echo "Hello, $recipient\n";
}

function helloMars() {
    hello('Mars');
}

func_alias('greeting', 'hello');
func_alias('greetingMars', 'helloMars');

greeting('World');
greetingMars();
9
ответ дан 7 November 2019 в 08:16
поделиться
Другие вопросы по тегам:

Похожие вопросы: