How to override built-in PHP function(s)?

user1386320 picture user1386320 · Mar 5, 2013 · Viewed 17.3k times · Source

I would like to override, let's say mysql_num_rows with let's say following:

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

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

Does PHP support built-in function overriding?


EXTENDING

I want to create an OpenSource solution which will override all existing mysql_* functions, and it their function body I'll be using PDO instances and methods, and properties.

This means that users who already use the mysql_* and find it hard to move completely to PDO, should just include this function override, and all properties, function calls, function return values, argument values, etc, should be left the same.

Answer

Ron van der Heijden picture Ron van der Heijden · Mar 5, 2013

I think it could be done like so:

//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

Notice that every host must have http://php.net/manual/en/book.apd.php installed on the server.

Edit

Another way is to use namespaces

<?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