[英]PHP runkit_function_rename don't work?
此代碼不起作用。 為什么不?
<?php
function test()
{
echo 'test';
}
runkit_function_rename('test', 'test2');
test2();
?>
我真正想要的是這個。 我正在使用具有 function 的系統。 當我在本地主機上時,我希望 function 做一些不同的事情。 我想用自己的東西覆蓋 function。
也歡迎所有替代方案。
您是否安裝了 PECL 擴展?
http://www.php.net/manual/en/runkit.installation.php
This » PECL extension is not bundled with PHP.
我也從來沒有遇到過 Runkit。
你要求替代品,我絕對可以推薦這個:
Patchwork 是一個 PHP 函數覆蓋庫。 換句話說,它的工作與 Runkit 大致相同。
主要區別在於它是用純 PHP 編寫的 - 無需安裝擴展; 只是代碼頂部的require_once()
。
不利的一面是,因為它是純 PHP,它只能替換程序中定義的函數; 即它不能像 Runkit 那樣覆蓋 PHP 內置 function 可以。 您問題中的示例適用於 Patchwork,但無法嘗試像mysql_query()
那樣覆蓋 PHP function 。
然而,與 Runkit 不同的是,它運行良好,所以如果你能忍受這個限制,我強烈推薦它。
您可能想嘗試的 Runkit 的另一種替代方法是PHP Test Helpers 。 這是一個 PHP 擴展,涵蓋與 Runkit 幾乎相同的領域。 和PHPUnit是同一作者寫的,應該還不錯。 但是,當我嘗試安裝它時,我也沒有太多的樂趣,所以我不能對此發表太多評論。
我從您在其他地方對此問題的評論中注意到,您正在運行 Windows(即 WAMP)。 Runkit 和 PHP 測試助手都沒有提供 Windows 可執行文件; 為了在 Windows 中使用它們中的任何一個,您需要自己從 C 源代碼編譯擴展。 因此,如果您使用的是 Windows,那么 Patchwork 是您唯一明智的選擇。
盡管正確安裝了 runkit 庫,但有些人可能還會遇到 runkit_function_* 函數不起作用。 這是因為這些功能在某些 PHP 版本(可能至少所有 5.2.*)中被破壞,如下所示: https://bugs.php.net/bug.ZE1BFD762321E40963CEE4ZACid=528C
我真正想要的是這個。 我正在使用具有 function 的系統。 當我在本地主機上時,我希望 function 做一些不同的事情。 我想用自己的東西覆蓋 function。
也歡迎所有替代方案。
function test() {
if($_SERVER['HTTP_HOST'] == 'localhost' {
// do one thing
} else {
// do other thing
}
}
如果您打算使用 runkit,則需要使用runkit_function_redefine
而不是runkit_function_rename
來使相同的 function 做不同的事情。
如前所述,最好在 function 主體內部區分 $_SERVER['HTTP_HOST'] 的值。
雖然我個人認為這是不好的風格,但您甚至可以在其他函數或塊中定義 function。
這個片段定義了一個function get_template_part():
if($_SERVER['HTTP_HOST'] == 'localhost' {
function get_template_part() {
}
} else {
function get_template_part() {
}
}
不幸的是,這對您的情況沒有幫助,因為 get_template_part() 已經在您的范圍之外定義。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.