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