Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > PHP: Общие вопросы > вызов конкретной функции из класса


Автор: Sukhof 12.12.2004, 13:20
Народ! помогите ламеру. В ООП полный дуб. Суть такая, мне необходимо перейти на использование классов, поэтому собстно и начал осваивать, а то уже замаело по 200 файлов с разными функциями редактировать, хочу все в одно место собрать. Есть вот такой класс
Код

class name
{


function sum(здесь 4 аргумента)

       {
       echo "сдесь производим суммирование из БД и выводим результат ";
       }

function edit(здесь 2 аргумента)
       {
       echo "Здесь редактируем полученные данные из БД";
       }

function add($name) // здесь один
       {// Здесь добавляем
       echo "input type=text name='$name' value=''";
       }

}



соответственно на главной странице есть три ссылки, добавить (?act=add), суммировать (?act=sum) и редакт.(?act=edit)
Вопрос как из этого класса вызвать нужную функцию.

А может я вообще по неправильному пути пошел. В БД есть 46 таблиц соответственно надо с ними выполнять три операции добавлять, изменять и получать. Когда взялся за проект я сделал так каждую операцию разместил по трем разным папкам. Теперь в каждой папке есть по 46 файлов. Знаю, знаю это ламерский ход. Недавно мне дали еще пару таблиц, так я пол дня просидел с добавлением операций для новых таблиц. Решил это дело унифицировать. Мой пропитые мозги подсказали что надо осваивать ООП. Хочу чтоб было так

<td><?выполнятеся нужная операция?></td>//и таких строк в одном файле может доходить до 100

Если я сделаю так то у меня будет 46 файлов в одной папке, а не по трем по 46

Автор: Mal Hack 12.12.2004, 14:25
Цитата
соответственно на главной странице есть три ссылки, добавить (?act=add), суммировать (?act=sum) и редакт.(?act=edit)
Вопрос как из этого класса вызвать нужную функцию.
+

Код

// описание класса....

$Obj = & new ClassName;

switch( $_GET['act'] )
{
 case 'add' : $Obj -> Add( params... ):
 case 'edit' : $Obj -> Edit( params... ):
 case 'sum' : $Obj -> Sum( params... ):

}

Автор: Sukhof 12.12.2004, 14:29
чего то я ничего не понял можно поподробнее с коментами
Добавлено @ 14:34
Ой все разобрался просто не знал что такое switch

Автор: Sukhof 12.12.2004, 14:41
Но вот отсюда вытекает опять вопрос, допустим выбрали нужную функцию, которая, скажем связалась с БД, (например) просуммировала определенные позиции в таблицах БД и выдало значение. Как теперь это значение красиво и окуратно, без нагромождений вставить в html код. Скажем вот пример:

<table>

<tr>
<td>Значение 1</td> <td>Значение 2</td> <td>Значение 3</td>
</tr>

<tr>
<td>Значение 4</td> <td>Значение 5</td> <td>Значение 6</td>
</tr>

</table>

Получиться не красиво если в теги TD каждый раз писать switch и т.д.

Автор: Mal Hack 12.12.2004, 14:57
2 цикла.
верхний - по <tr>, внутренний по <td> и там вставляй значения....

Автор: Sukhof 13.12.2004, 11:13
Нет с циклами дело не прокатит так как иногда некоторые таблицы в мускуле бывают пустые. Пробовал получается что если мускул не вернул значения то не выводится html таблица.

Автор: Sukhof 13.12.2004, 11:39
Ой понял но все равно это получается весьма громоскло. Может есть другой способ

Автор: Mal Hack 13.12.2004, 12:34
Вместо switch'a можеш написать eval( "\$Obg -> ".$_GET['act']."();" );
Но это не самый лучший вариант...
Цитата
Ой понял но все равно это получается весьма громоскло. Может есть другой способ

Ну и что? Главное алгоритм правильно продумай.

Автор: IZ@TOP 13.12.2004, 14:35
Цитата(Mal @ 13.12.2004, 13:34)
eval( "\$Obg -> ".$_GET['act']."();" );

Да, это чревато запросм ввиде:
Цитата
http://example.com/index.php?act=val;implode('', file(__FILE__));print

Автор: Mal Hack 13.12.2004, 14:47
IZ@TOP да это-то понятно... Я и писал: "Но это не самый лучший вариант..."...
В любом случае входняк надо всегда проверять...

Автор: skalex 14.12.2004, 13:24
Sukhof, если методы в Вашем классе статические (не оперируют с переменными класса), то обращаться к ним следует так:
Код
ClassName::MethodName($args);

И создавать экземпляр класса не требуется.

Автор: Guest 14.12.2004, 16:06
Так весело, если бы я еще знал о чем это. Попробую объяснить по другому. Структура проекта такая:

/add/file1.inc // в этом файле формы для заполнения
Содержание файла такое
Код

<tr>
<td><input name=1></td>
<td><input name=2></td>
<td><input name=3></td>
</tr>


/edit/file1.inc // в этом файле формы для редактирования
Код

<tr>
<td><input name=1 value='<?edit ('здесь изменяем значения в БД', $name = '1') ?>'></td>
<td><input name=1 value='<?edit ('здесь изменяем значения в БД', $name = '2') ?>'></td>
<td><input name=1 value='<?edit ('здесь изменяем значения в БД', $name = '3') ?>'></td>
</tr>


/sum/file1.inc // в этом файле выводим результат суммирования по различным критериям
Код

<tr>
<td><?echo sum ('выводим суммированное значение из БД'); ?></td>
<td><?echo sum ('выводим суммированное значение из БД'); ?></td>
<td><?echo sum ('выводим суммированное значение из БД'); ?></td>
</tr>


Все это находится в разных папках в разных файлах, т.е. в каждой папке 46 файлов, всего 138 файлов. Естестно здесь пример есть такие файлы где количество полей input переваливает за 200. Что бы внести изменения, сами понимаете сколько надо перелапатить.

Хочу сделать так

/file1.inc //
Содержание файла такое
Код

<tr>
<td><? сюда подставляем нужные теги с нужной функцией изходя из переданных по ссылке значений переменной act т.е. это или add или edit или sum
, а код программы подставил уже нужные функции и теги ?><td>
<td><?сюда подставляем нужные теги с нужной функцией изходя из переданных по ссылке значений переменной act т.е. это или add или edit или sum,
а код программы подставил уже нужные функции и теги ?></td>
<td><? сюда подставляем нужные теги с нужной функцией изходя из переданных по ссылке значений переменной act т.е. это или add или edit или sum
, а код программы подставил уже нужные функции и теги?></td>
</tr>


И будет выглядеть все просто и красиво, изменять легко и вносить новые формы просто

Автор: Sukhof 14.12.2004, 16:08
Сорри это был я а не гость
Добавлено @ 16:09
Файлы совпадают между собой, т.е. они идентичны, но в каждом файле используются разные функции

Автор: IZ@TOP 14.12.2004, 16:18
Если эти файлы подключаются внутри обхъекта класса, то следует к ним обращаться так: $this->sum(...):
Код

<tr>
<td><?echo $this->sum ('выводим суммированное значение из БД'); ?></td>
<td><?echo $this->sum ('выводим суммированное значение из БД'); ?></td>
<td><?echo $this->sum ('выводим суммированное значение из БД'); ?></td>
</tr>

Если они подключаются из какого либо другого файла и объект твоего класса создан, то следует обращаться к ним через имя созданного объекта (например $obj = new ClassName;):
Код

<tr>
<td><?echo $obj->sum ('выводим суммированное значение из БД'); ?></td>
<td><?echo $obj->sum ('выводим суммированное значение из БД'); ?></td>
<td><?echo $obj->sum ('выводим суммированное значение из БД'); ?></td>
</tr>

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)