簡體   English   中英

PHP runkit_function_rename 不起作用?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM