Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   PHP (http://www.flasher.ru/forum/forumdisplay.php?f=20)
-   -   ссылка на ф-цию из ф-ции (http://www.flasher.ru/forum/showthread.php?t=34977)

ZJA 25.07.2002 12:58

ссылка на ф-цию из ф-ции
 
все привыкли повторяющийся кусок текста выносить в отдельный файл и просто инклюдить, а повторяющийся элемент кода выносить в ф-цию(кот. тоже можно вынести в отдельный файл) и потом вставлять собственно ф-цию. Как сделать ф-цию, которая будет передавать управление другой наперед не известной ф-ции? На многих сайтах используются сессии для передачи информации о пользователе (например) от одной страницы сайта другой. Т.е. мы имеем нечто вроде:
Код:

if(session_is_registered("valid_user"))
{
//какой-то набор действий
}
else
{
echo"идите регистрируйтесь";
}

, теперь допустим у сайта много разных мест где надо проверить валидность пользователя и каждый раз нам придется использовать эту конструкцию.
я веду к тому, что нельзя ли сделать что-то вроде (считаем что $valid_user - глобальная переменная):
Код:

function SIR(ссылка на ф-цию)
{
if(session_is_registered("valid_user"))
{
ф-ция
}
else
{
echo"идите регистрируйтесь";
}
}

Не то чтобы это сильно повлияло на скорость, но читабельность по-моему должна возрасти.

RFMitrio 25.07.2002 13:28

Мне кажется, стоит попробовать так:
class A
{
function doOne()
{
}
}

class B
{
function doOne()
{
}
}

То есть функция одна, но для разных классов. Потом делаешь:
$a=new A;
$b=new B;

function SIR($obj)
{
if(session_is_registered("valid_user"))
{
$obj->doOne();
}
else
{
echo"идите регистрируйтесь";
}
}

И вызываешь свою функцию SIR для разных объектов:
SIR($a);
SIR($b);
Вот и все дела. Мне кажется, должно раюотать.
-------
Гы, а вот сишные конструкции типа void (*mysig(int sig, void(*hndlr)(int)))(int) в пхп невозможны, если я не ошибаюсь ;) .

ZJA 25.07.2002 13:55

да это вариант
 
единственное что, не нравится мне идея использоватьдля такой малой феньки объекты, они же каждый раз будут новую копию в памяти создавать, а это... ну тупо это и некрасиво, и упераемся мы опять в тоже самое, ссылка на объект)))
я так думаю, мы же можем передавать ссылку на переменную
Код:

$a=1;
function(&$a)
{
$a++;
}
echo $a;

получим 2
при том что
Код:

$a=1;
function($a)
{
$a++;
}
echo $a;

получим 1
особенно это имеет смысл для переменных с большими значениями, например для массивов
вот надо будет попробовать так же с ф-циями поступить, может прокатит, а если не прокатит, то только твой вариант остается, но просто тогда кажись овчинка выделки не стоит

kompadre 26.07.2002 00:42

:eek:

Нувы блин даете ...

Если ныжно передать "контроль" наперед неизвестной функции напиши

PHP код:

$unknown = "unnown_function";
$result = $unknown(); 

Что может быть проще :confused:

ZJA 26.07.2002 11:39

кул
 
снимаю шляпу, опробовал, все прокатило, уважение отцу


Часовой пояс GMT +4, время: 20:37.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.