開發PHP專案的時候,有時會有更改 function 名稱的需求,也許當時是趕時間草率命名,也許是拼錯字,但隨時間推移,更改 function 的名字就變得很可怕,可能一改造成一連串的錯誤,但不改又很礙眼,感覺很痛苦,為避免錯誤連換爆的這個狀況,思考是否可以用「別名」的概念,讓新的 function 跟舊的 function 都可以做一樣的事情,在不發生錯誤的情況下慢慢汰除舊名字,隨著版本的演進直至所有舊名都被移除,最後再將「別名」移除
最簡單的做法
stackoverflow Jon 提供了一個最簡單的做法
https://stackoverflow.com/a/23426311
use function sleep as wait;
不過此做法存在缺陷,在 class 中呼叫會找不到 function
以下是目前最好解法
由 stackoverflow Nathan Crause 提出
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();
https://stackoverflow.com/a/2877219/6784662
做了一點小修改
龜毛了一點,我習慣別名再右方,為維持這習慣我把上面方法做了一點小修改,更好理解
/**
* function alias
*
* @link https://vector.cool/php-function-alias/
*
* @param string $func
* @param string $alias
* @return void
*/
function func_alias(string $func, string $alias)
{
eval("function $alias() { \$args = func_get_args(); return call_user_func_array('$func', \$args); }");
}