[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Генратор функции
Valerius
Я в программировании новичок.

Но столкнулся с одной задачкой.

Создавать функции научился, классы тоже и функции в классах - другими словами постепенно иду в перед.

Наверное ОЧЕНЬ ламеский вопрос хочу задать к гуру.

Как создать

function # нужное название () { /* код */}

Что-бы было понятно суть вопроса:
Есть база данных.

Она выводит id
1
2
3

$query = "SELECT * FROM nav";
$result = mysql_query($query) or die("Query failed : " . mysql_error());
while ($row = mysql_fetch_array($result)) {
$id_name=$row['name'];
$id_n=$row['id'];
}

необходимо чтобы результат mysql генерировал - function $id_n () { /* код */}

Если очень ТУПО выглядеть должно так (или хоть как-то).

$query = "SELECT * FROM nav";
$result = mysql_query($query) or die("Query failed : " . mysql_error());
while ($row = mysql_fetch_array($result)) {
$id_name=$row['name'];
$id_n=$row['id'];

function $id_n () { /* код */}
}

Я так понял для этого нужно создать класс. А как и что дальше делать я понятия не имею.

Нашел 1 пример конструктора, а он как на зло и не пашет.



Спустя 10 минут, 44 секунды (12.09.2011 - 15:25) inpost написал(а):
Valerius
А зачем тебе весь этот геморой? Функция с одним названием, обработка уже будет зависеть от входящих данных. Зачем прям имена генерировать рандомно? Какой от этого толк?

Спустя 2 минуты, 49 секунд (12.09.2011 - 15:28) linker написал(а):
А зачем именно так?

Спустя 4 минуты, 29 секунд (12.09.2011 - 15:33) sharki написал(а):
Это плохая практика, а так для ознакомления, генеришь строку вида :


$id_n = 'fn_234234';

$newFn = 'function '.$id_n.'($bla){ return $bla; }';

eval($newFn);

echo $id_n("Значения\опционально");


Главное чтобы функция НЕ НАЧИНАЛАСЬ С ЦИФР

Спустя 7 минут, 22 секунды (12.09.2011 - 15:40) Valerius написал(а):
Базово грубо говоря.
Делается switch в нем эта-же база создает параметры для нужной функции и нужно генерировать саму функцию отдельно с приравненным параметром.


switch ($id) {

//*********************************************************************
case 'p00': // страница 1
$content = fPage0();
break;
case 'p01': // страница 1
$content = fPage1();
break;
case 'p02': // страница 2
$content = fPage2();
break;
case 'p03': // страница 3
$content = fPage3();
break;
//*********************************************************************
default: // главная страница
$content = fPage0();
}




// получаем всю страницу
$skin = fGlobal($content);
// выводим страницу


function fPage0(){
return <<<EOF
<p>Главная
EOF;
}


function fPage1(){
return <<<EOF
<p>Страница 1
EOF;
}

function fPage2(){
return <<<EOF
<p>Страница 2
EOF;
}

function fPage3(){
return <<<EOF
<p>Страница 3
EOF;
}


echo $skin;

Спустя 2 минуты, 41 секунда (12.09.2011 - 15:43) linker написал(а):
function fPage($id)
{
return 'Страница ' . $id;
}

Спустя 1 час, 20 минут, 52 секунды (12.09.2011 - 17:03) m4a1fox написал(а):
Тут глубже идея ИМХО! Создать функцию, кот. будет создавать другие функции! smile.gif

Спустя 17 минут, 5 секунд (12.09.2011 - 17:21) Valerius написал(а):
Да

Спустя 12 минут, 31 секунда (12.09.2011 - 17:33) m4a1fox написал(а):
Valerius
Цитата
Да

От! А теперь по секрету. Зачем?

Спустя 1 минута, 13 секунд (12.09.2011 - 17:34) sharki написал(а):
Valerius
Я же тебе показал как надо делать, это единственный способ

Спустя 6 минут, 10 секунд (12.09.2011 - 17:40) Valerius написал(а):
Цитата (m4a1fox @ 12.09.2011 - 14:33)
Valerius
Цитата
Да

От! А теперь по секрету. Зачем?

А я понятьия не имею что будет происходить когда пользователь загрузит страницу или вызовет какой-либо цикл.

Вот оно и должно будет думать загрузить шаблон или запустить тот или иной скрипт.

Спустя 44 секунды (12.09.2011 - 17:41) Valerius написал(а):
Цитата (sharki @ 12.09.2011 - 14:34)
Valerius
Я же тебе показал как надо делать, это единственный способ

Спасибо

Спустя 40 секунд (12.09.2011 - 17:42) m4a1fox написал(а):
Valerius
Цитата
Вот оно и должно будет думать загрузить шаблон или запустить тот или иной скрипт.

smile.gif Вот оно че Михалыч! Тоды тебе в MVC надо удариться!

Спустя 3 часа, 56 минут, 36 секунд (12.09.2011 - 21:38) vital написал(а):
Цитата (Valerius @ 12.09.2011 - 14:41)
Цитата (sharki @ 12.09.2011 - 14:34)
Valerius
Я же тебе показал как надо делать, это единственный способ

Спасибо

Нет.
eval штука не хорошая.

Не вижу проблемы юзать что-то такое..
ниже кусок роутера, из моего проекта.
else if (strpos($_GET['action'], '/') !== false)
{
$route = explode('/', $_GET['action']);

$name = $route[0] . 'controller';

if (!class_exists($name, true))
throw new Exception('Controller ' . $name . ' does not exists!');

$controller = new $name(); //обращаем внимание на это
if (method_exists($controller, $route[1]))
{
$controller->$route[1](); //и на это.
} else

Теперь в случае автора, не вижу проблемы, что бы сделать как-то так
$imya_funccii_iz_bazy_dannyh='page_1'; //Дергаем бд, получаем название функции
$$imya_funccii_iz_bazy_dannyh(); //и вот так вызываем.


Но, автору темы, вместо таких дебрей лучше на самом деле почитать про MVC. На хабре есть примеры реализации.

Спустя 5 минут, 30 секунд (12.09.2011 - 21:44) vital написал(а):
А еще есть хорошая функция create_function()
про которую полезно почитать тоже.(да и вообще, про анонимные функции)

Спустя 3 дня, 10 часов, 43 минуты, 20 секунд (16.09.2011 - 08:27) linker написал(а):
Valerius
Пользователь всёравно чтобы он не вводил не сможет сделать более того, что ты там напрограммил. Поэтому смыла в таком говнокодинге не вижу.
Быстрый ответ:

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