15

我想覆盖,让我们说mysql_num_rows让我们说以下:

$dataset = array(array('id' => 1, 'name' => 'Zlatan', 'onSOF' => 1), array('id' => 1, 'name' => 'Guest', 'onSOF' => 0));

function mysql_num_rows($dataset) {
    return sizeof($dataset);
}

PHP 是否支持内置函数覆盖?


扩展

我想创建一个 OpenSource 解决方案,它将覆盖所有现有的mysql_*函数,它的函数体我将使用 PDO 实例和方法以及属性。

这意味着已经使用mysql_*并且很难完全迁移到 PDO 的用户应该只包含这个函数覆盖,并且所有属性、函数调用、函数返回值、参数值等都应该保持不变。

4

2 回答 2

19

我认为可以这样做:

//First rename existing function
rename_function('strlen', 'new_strlen');
//Override function with another
override_function('strlen', '$string', 'return override_strlen($string);');

//Create the other function
function override_strlen($string){
        return new_strlen($string);  
}

在这里找到

请注意,每个主机都必须在服务器上安装http://php.net/manual/en/book.apd.php 。

编辑

另一种方法是使用命名空间

<?php
    namespace mysql2pdo;
    use PDO;
    function mysql_connect() {
       return new PDO();
    }
    echo mysql_connect(); // Causes error because we don't have the parameters
?>

在这里测试

于 2013-03-05T18:31:35.297 回答
2

安装runkit和使用runkit_function_redefine。仅在开发/测试服务器上执行,从不在生产中执行。

于 2013-03-05T18:02:53.013 回答