[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: php переназначить стандартную функцию
inpost
Кажется видел раньше, но не могу найти. Смысл внутри скрипта изменить стандартную функцию.
Банальный пример:
function mysql_real_escape_string($var) {
echo $var;
}
mysql_real_escape_string($var);


Именно штатные функции, и можно ли это сделать вообще?



Спустя 6 минут, 26 секунд (8.12.2011 - 16:48) Winston написал(а):
Попробуй это
http://ru2.php.net/manual/ru/function.override-function.php



Спустя 2 минуты, 11 секунд Winston написал(а):
Или это
http://ru2.php.net/manual/ru/function.runk...on-redefine.php



Спустя 8 минут, 48 секунд Winston написал(а):
Но нужно будет установить расширение APD установить, чтобы работало переопределение ф-й.



Спустя 10 минут, 20 секунд Winston написал(а):
А для второй ф-ии расширение Runkit.

Спустя 12 минут, 2 секунды (8.12.2011 - 17:00) inpost написал(а):
Winston
Да, спасибо, я почитал, но способ кривой. Кучу всяких приложений ставить для pecl, это не выход.
Может есть возможность стандартными возможностями это сделать? Беда не во мне, а в хостерах, потому что для обычных сайтов это отключено и в стандартный пакет установки не входит!

Спустя 15 минут, 55 секунд (8.12.2011 - 17:16) inpost написал(а):
Может есть возможность перехватывать функцию, или дополнять её? Собственно мне нужно лишь добавить перед обработкой (и,или после) кое-какие действия + выполнение самой функции.

Спустя 33 минуты, 34 секунды (8.12.2011 - 17:50) Winston написал(а):
Походу не получится так просто переопределить, только с помощью тех 2-х костылей, что я написал.
Здесь тоже об этом говорят.

Спустя 22 минуты, 35 секунд (8.12.2011 - 18:12) inpost написал(а):
1. Использовать функции-контейнеры, которые будут добавлять некоторый функционал до или после вызова встроенной функции). Решение в лоб, которое собственно проблему решает весьма косвенно...

А про какой контейнер тут говорится? То есть действие до выполнение моего кода - мне вполне подойдет!

Спустя 6 минут, 22 секунды (8.12.2011 - 18:19) Winston написал(а):
Ну наверное под контейнером подразумевалось, что-то вроде этого:
function myRES($data)
{
// Некие манипуляции
return mysql_real_escape_string($data);
}

Спустя 13 часов, 22 минуты, 44 секунды (9.12.2011 - 07:42) linker написал(а):
Ух, вот уж чего делать категорически не надо, так это переопределять стандартные функции.

Спустя 1 час, 30 минут, 40 секунд (9.12.2011 - 09:12) Dezigo написал(а):
Давайте переопределим ещё
FALSE = TRUE
TRUE = FALSE
laugh.gif

Спустя 44 минуты, 23 секунды (9.12.2011 - 09:57) sergeiss написал(а):
inpost - я тоже не понял, зачем тебе это нужно? Чтобы не переписывать код, а изменить логику работы, что ли?

И почему такой вариант не подходит?
Цитата (Winston @ 8.12.2011 - 19:19)
function myRES($data)
{
// Некие манипуляции
return mysql_real_escape_string($data);
}



Спустя 8 минут, 24 секунды (9.12.2011 - 10:05) Michael написал(а):

Спустя 1 час, 38 минут, 2 секунды (9.12.2011 - 11:43) twin написал(а):
Цитата (inpost @ 8.12.2011 - 13:42)
Кажется видел раньше, но не могу найти.

Скорее всего ты видел определение несуществующих функций. К примеру для 4 ветки PHP это:

    if(!function_exists('file_put_contents'))
{

function file_put_contents($filename, $content, $flag);
{
if(!file_exists($filename))
fclose(fopen($filename, "a+t"));

$f = fopen($filename, "r+t");

while(!flock($f, LOCK_EX + LOCK_NB))
sleep(1);

if($flag == FILE_APPEND)
{
fseek($f, 0, SEEK_END);
}
else
{
ftruncate($f, 0);
fseek($f, 0, SEEK_SET);
}

if(is_array($content))
$content = implode('', $content);

fwrite($f, $content );

return fclose($f);
}
}

Спустя 5 часов, 13 минут, 54 секунды (9.12.2011 - 16:57) inpost написал(а):
Я вот поразмыслил, мне даже не то, чтобы изменить, мне условия перед и после нужны.
Допустим при запуске include, перед этим автоматически запускался if(file_exists), и тогда не нужно было бы внутри кода писать каждый раз по 5 строчек if-else, достаточно перехватывать событие, как на js, и выполнять определённый код до выполнения основного события.
Запустил include, а у меня перед этим проверился, есть ли файл, а если нет - exit();
Цель: не создавать свою собственную функцию include2, или mysql_query2, а дополнить функционал уже существующей и частоиспользуемой.


_____________
Обучаю веб-программированию качественно и не дорого: http://school-php.com
Фрилансер, принимаю заказы: PHP, JS, AS (видео-чаты). Писать в ЛС (Личные сообщения на phpforum).
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.