[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: MVC + ООП + Мелочи по PHP
fallow
Во что я тут намудрил :)
Пытаюсь войти в MVC, тут делаю скрипт который переводит из одной системы счиления в другую с процессом решения, и заcтрял...
Хочу в контроллере проверять какая имена кнопка нажата, но как? ума не хватает.
Далее в зависимости от результата запускать определённый метод из модели.
И ещё - а у меня всё правильно?) если смотреть по правильности архитектуры MVC.
Думаю все слова которые в модели походу процесса заносить в массив, потом всё в вид, и из контроллера вызывать?
Немного хромаю со свойстами класса. Как быть с переменной из формы? Ей присваивать спецификатор доступа, или-же прямо так использовать? Как быть если нужно передать методу приватное свойство класса?
Так не катит

<?php
class
Test
{
private $var;
public function($this->var)
}
?>


Сам скрипт, застрял на swicth'e

<?php


class
Model
{
private $residue = array();
private $process = array();
private $count = array();
private $reply;
private $powPlusReply;
private $source;

//функция перевода из 10 системы счисления в любую другую С.С
public function of10inX($number, $base)
{
$this->source = $number;

for($i=0,$counter = 1; $number > $base; $i++,$counter++)
{
$this->reply = $number;
//делим число на новое основание и записываем остаток в массив
$this->residue[$i] = $number % $base;
//процесс решения
$this->process[$i] = "<b>$counter</b>. Делим число {$number} на основание {$base}, получаем ";
//делим число на новое основание и пишем ответ в переменную $number;
$number = $number/$base;
//округляем в целое число в меньшую сторону
$number = floor($number);
//далнейший процесс решения
$this->process[$i] .= "{$number}, остаток {$this->residue[$i]}";
//счётчик
$this->count[$i] = $i;
}

//последний ответ дополняем в массив
$this->residue[] = floor($number);
$this->count = max(array_keys($this->count)) + 2;
//пишем в процесс решения последний делитель
$this->process[] = "<b>{$this->count}</b>. Последний ответ равный $number записываем первым, а затем все остатки<br />";
//сортируем в обратном порядке
$this->residue = array_reverse($this->residue);
//выводим процеcс решения
foreach($this->process as $key => $value)
{
echo "$value\n";
}
//выводим ответ
echo "Ответ: $this->source<sub>10</sub> равно ";
foreach($this->residue as $val)
{
echo "$val";
}
echo "<sub>$base</sub>";
}



//функция для перевода из числа с основание X в десятичное число
public function ofXin10($number, $base)
{
$this->source = $number;

//сделаем число строкой для разбиения числа на цифры
$this->reply = strval($number);
//заносим каждую цифру в массив под новым индексом
for($i=0; $i<strlen($this->reply); $i++)
{
$this->residue[] = $this->reply[$i];
}
//сортируем массив в обратном порядке
$number = array_reverse($this->residue);

for($i=0; $i<max(array_keys($number)) + 1; $i++)
{
$this->reply = pow($base, $i).'<br />';
$this->powPlusReply[] = $this->reply * $number[$i];
$this->process[] = '('."$number[$i]".' * '."$base".'<sup>'."$i".'</sup>)';
}

echo "$this->source<sub>$base</sub> = ";
echo implode($this->process, " + " )." = ".array_sum($this->powPlusReply)."<sub>10</sub>";

}

}


class Controller extends Model
{
private $error = array();


function validation($number)
{
$number = $_POST['number'];
$base = $_POST['number'];

if(!$number && !is_int($number))
$this->error[] = "Вы не ввели число или введено неккоректное число" ;

if(count($this->error) == 0)
return true;

}


function select()
{

switch()
{
case $_POST['of10inX'] :

break;
case $_POST['ofXin10'] :

break;

default:
View::of10inX();
View::ofXin10();
break;
}
}
}



class View extends Controller
{
public function of10inX()
{

echo'
<table border="0" cellpadding="0" cellspacing="10">
<form action="" method="post">
<tr>
<td><i>Число </i><input type="text" name="number" /></td>
<td>
из <b>10</b>
</td>
<td>
в
</td>
<td>
<select name="base">
<option>2
<option>8
<option>16
</select>
</td>
</tr>
<tr align="center">
<td>
<input type="submit" name="of10inX" value="Вычислить" />
</td>
</tr>
</form>
</table>
'
;
}

public function ofXin10()
{
echo'
<table border="0" cellpadding="0" cellspacing="10">
<form action="" method="post">
<tr>
<td><i>Число </i><input type="text" name="number" /></td>
<td>
из
<select name="base">
<option>2
<option>8
<option>10
<option>16
</select>
</td>
<td>
в <b>10<b />
</td>
</tr>
<tr align="center">
<td>
<input type="submit" name="ofXin10" value="Вычислить" />
</td>
</tr>
</form>
</table>
'
;
}

}




?>

Делая всё больше и больше программу, осознаешь почему нужны магические методы)



Спустя 23 минуты, 47 секунд (8.02.2011 - 17:08) T1grOK написал(а):
На счет кнопки. Задаешь каждой кнопке свое имя и в контролелере проверяешь

if ($_POST['имя кнопки']){
.....
}elseif($_POST['имя кнопки']){
....
}

MVC. Желательно вынести html разметку. А вообще разновидностей MVC архитектуры огромное множество, главное сама идея даного подхода.

Спустя 4 минуты, 16 секунд (8.02.2011 - 17:12) fallow написал(а):
T1grOK
Оо спасибо:)
а как насчёт первого примера?

Спустя 24 минуты, 21 секунда (8.02.2011 - 17:37) T1grOK написал(а):
Если нужно передать методу приватное свойство класса. Конечно, ваш сбособ не является правильным, потому как приватные свойства могут быть использованы только в методах данного класса(объекта).

class Test
{
private $var;
private function($value){
.....
}
public function2(){
$this->function($this->var);
}
}


Думаю тут объяснения не требуются.
Быстрый ответ:

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