Подтвердить что ты не робот

Как переопределить встроенные функции PHP?

Я хотел бы переопределить, допустим 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, должны просто включить это переопределение функции, и все свойства, вызовы функций, возвращаемые значения функций, значения аргументов и т.д. должны быть оставлены то же самое.

4b9b3361

Ответ 1

Я думаю, что это можно сделать так:

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

Протестируйте его здесь

Ответ 2

Установите runkit и используйте runkit_function_redefine. Только делайте это только при разработке/тестировании серверов, никогда в производстве.