我们可以在php中使用别名吗?

Ati*_*din 53 php alias function

是否可以在PHP中使用不同的名称对函数进行别名?如果有,怎么样?

假设我们有这个函数sleep();

有没有快速的方法来创建一个名为wait()的别名;

不写这段代码

function wait( $seconds ) {
    sleep($seconds);
}
Run Code Online (Sandbox Code Playgroud)

Luk*_*man 62

直到PHP 5.5

function wait ($seconds) { sleep($seconds); }是的,是要走的路.但如果您担心必须更改wait(),您应该更改sleep()的参数数量,那么您可能需要执行以下操作:

function wait() { 
  return call_user_func_array("sleep", func_get_args());
}
Run Code Online (Sandbox Code Playgroud)

  • `func_get_args()`只能在PHP> 5.3中使用,你可以在参数列表中使用它.在PHP <5.3中,你必须使用一个临时变量:`$ args = func_get_args(); return call_user_unc_array('sleep',$ args);` (14认同)
  • 这不适用于参考. (4认同)

Jon*_*Jon 51

仅限PHP 5.6+

从PHP 5.6开始,可以通过导入来对别名进行别名:

use function sleep as wait;
Run Code Online (Sandbox Code Playgroud)

  • 这将如何寻找类的方法? (7认同)
  • 以下是我所知道的一种方法(包括不好的方法),它们是一个类的方法,包括静态和非静态方法:https://gist.github.com/nathanbrauer/cdd286351f68a1b4e3a5 (4认同)
  • @VincentPoirier导入是每个文件,另一个文件无法为您重新定义函数. (3认同)

Fed*_*oca 27

不,但你可以这样做:

$wait = 'sleep';
$wait($seconds);
Run Code Online (Sandbox Code Playgroud)

这样您还可以解决参数号问题

  • @GSto这并不是最好的解决方案.这只是一种可能性.我不敢相信它被投了这么多:-) (5认同)
  • 不过,可变变量可能会变得非常混乱。我认为这不是解决这里问题的最佳方法。 (2认同)

Óla*_*age 21

如果你有PHP 5.3,你也可以看看lambdas

$wait = function($v) { return sleep($v); };
Run Code Online (Sandbox Code Playgroud)


Nat*_*use 9

如果你不关心使用PHP的"eval"指令(许多人都有真正的问题,但我没有),那么你可以使用这样的东西:

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

我在一些简单的测试中使用它,它似乎工作得相当好.这是一个例子:

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

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

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

greeting('World');
greetingMars();
Run Code Online (Sandbox Code Playgroud)


Ala*_*orm 6

不,在PHP中没有快速的方法.该语言不提供别名功能而无需编写包装函数.

如果你真的真的需要这个,你可以编写一个PHP扩展来为你做这个.但是,要使用扩展,您需要编译扩展并将PHP配置为此扩展,这意味着应用程序的可移植性将大大降低.

  • 你不一定要重新编译php.您可以编译模块并通过php.ini包含它. (2认同)

Gre*_*reg 5

不,功能不是一等公民,所以没有wait = sleep像Javascript那样的例子.你基本上必须做你在问题中所做的事情:

function wait ($seconds) { sleep($seconds); }
Run Code Online (Sandbox Code Playgroud)