PHP function alias 方法別名

開發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); }");
}

如果文章對您很有幫助
請我喝杯咖啡吧

Bitcoin 比特幣錢包:

38ieWXhURt27br9XrDoCeo4eruzKyi8QKs



ann71727

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *

這個網站採用 Akismet 服務減少垃圾留言。進一步了解 Akismet 如何處理網站訪客的留言資料