php - 如何覆盖内置的 PHP 函数?

标签 php built-in overriding

我想覆盖,假设 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 的用户,应该只包括这个函数覆盖,以及所有属性、函数调用、函数返回值、参数值等,应该保持不变。

最佳答案

我认为可以这样做:

//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);  
}

found it here

注意每个主机都必须有 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
?>

Test it here

关于php - 如何覆盖内置的 PHP 函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15230883/

相关文章:

c++ - 为什么我必须在 C++ 的派生类中重新声明被覆盖的函数?

c# - 内部抽象方法。为什么会有人拥有它们?

java - 覆盖错误Java,程序不会只读取两种方法

java - 如何从 Java 连接到 SOAP 服务器并运行我的服务器内置方法/服务?

php - 如何防止在 Laravel 中加载 hasMany 关系?

c++ - 我在哪里可以找到内置的 gcc memcpy?

python - 如何添加内置函数?

php - Wordpress - 在 index.php 上加载自定义 css

php - 两个范围之间的MySQL查询

python - 检查 number 是否连续包含 x 个相等的数字