[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Как написать класс, который создаст структуру?
McLotos
Всем привет. Сейчас вот занялся оптимизацией кода, первоначально это было бесконечное колличество условий, далее всё это эволюционировало в 3 функции, но всё-равно объём кода остался внушительным, сейчас вот подумываю сделать класс, который бы выполнял всю эту работу, но вот m4a1fox советует написать под каждую задачу свой класс, а мне почему-то кажется что 3 функции в одном классе будет удобнее.
В чём суть
Класс (или группа классов) сначала вычищает полностью всё что находится в каталоге home, патом создаёт там 3 основных каталога и по ним раскидывает ещё 30, в результате получается дерево каталогов, затем запускается функция, которая создаёт внутри каждого из этих 30 каталогов какой-то свой файл, и забивает в него (в файл) нужный код.
Вот как получилось после оптимизации
$host=$_SERVER['DOCUMENT_ROOT'];
//эта функция удаляет старые каталоги из корня сайта
function dd($fileremove)
{if (file_exists($fileremove))
{chmod($fileremove,0777);
if (is_dir($fileremove))
{$handle = opendir($fileremove);
while($filename = readdir($handle))
if ($filename != "." && $filename != "..")
{dd($fileremove."/".$filename);}
closedir($handle);
rmdir($fileremove);
}
else
{unlink($fileremove);}
}
}

//эта функция создаёт новую структуру каталогов
function add($dir){
if(is_dir($dir))
{echo '<font color=yellow>Директория</font>
<b>'
.$dir.'</b>
<font color=yellow>уже существует</font><br>'
;}
else
{mkdir($dir, 0644);
if(is_dir($dir))
{echo '<font color=green>Директория</font>
<b>'
.$dir.'</b>
<font color=green> успешно обновлена</font><br>'
;}
else
{echo 'Ошибка создания директории '.$dir.'<br>';}
}}

//эта функция создаёт файлы в этих каталогах
function addf($fl,$mytext){
$fp = fopen($fl, "a");
ftruncate($fp, 0);
$test = fwrite($fp, $mytext);
if ($test) echo '<font color=green>Данные в файле </font><b>'.$fl.'</b><font color=green> успешно изменены.</font><br>';
else echo '<font color=red>Ошибка при записи в </font><b>'.$fl.'</b><br>';
fclose($fp);
}

Запускается всё вот так
$dir = $host."/system";if (file_exists($dir)){dd($dir); add($dir);}else{add($dir);}
$dir = $host."/system/core";if (!file_exists($dir)){add($dir);}else{dd($dir); add($dir);}
$dir = $host."/system/core/admin";if (file_exists($dir)){dd($dir); add($dir);}elseif(!file_exists($dir)){add($dir);}

только таких строк там 30
а дальше под каждый файл, который нужно создать пишется вот такой фрагмент кода
name = $host.'/system/core/admin/admin.inc.php';
$content = "<?session_start();?>
<?require_once
\$_SERVER['DOCUMENT_ROOT'].\"/system/Includes/global.inc.php\";dbconnect();?>";
addf($name,$content);

и после всех этих манипуляций файл index.php который всё это натворил, создаёт БД, забивает её и перезаписывает сам себя.

Как из этого всего создать класс, который был бы маленький, аккуратный и симпатичный =))))
Ну вот допустим пишу я
class Setup {

function dd($fileremove)
{if (file_exists($fileremove))
{chmod($fileremove,0777);
if (is_dir($fileremove))
{$handle = opendir($fileremove);
while($filename = readdir($handle))
if ($filename != "." && $filename != "..")
{dd($fileremove."/".$filename);}
closedir($handle);
rmdir($fileremove);
}
else
{unlink($fileremove);}
}
}


function add($dir){
if(is_dir($dir))
{echo '<font color=yellow>Директория</font>
<b>'
.$dir.'</b>
<font color=yellow>уже существует</font><br>'
;}
else
{mkdir($dir, 0644);
if(is_dir($dir))
{echo '<font color=green>Директория</font>
<b>'
.$dir.'</b>
<font color=green> успешно обновлена</font><br>'
;}
else
{echo 'Ошибка создания директории '.$dir.'<br>';}
}}


function addf($fl,$mytext){
$fp = fopen($fl, "a");
ftruncate($fp, 0);
$test = fwrite($fp, $mytext);
if ($test) echo '<font color=green>Данные в файле </font><b>'.$fl.'</b><font color=green> успешно изменены.</font><br>';
else echo '<font color=red>Ошибка при записи в </font><b>'.$fl.'</b><br>';
fclose($fp);
}

}

Дальше что?
Как заставить этот "класс" (комлект трёх функций) принять данные и правильно их обработать?



Спустя 8 минут, 39 секунд (16.11.2011 - 15:34) sergeiss написал(а):
Ты можешь объяснить, зачем тебе создавать класс ради этой задачи?

Спустя 6 минут, 29 секунд (16.11.2011 - 15:40) Guest написал(а):
Простите,но то что Вы написали называется "говно-кодом" laugh.gif

Спустя 2 минуты, 57 секунд (16.11.2011 - 15:43) McLotos написал(а):
Guest
Я знаю как это называется! =)))))
Вот я и пытаюсь на это примере медленно, но верно перебраться на ООП

Спустя 1 час, 17 минут, 23 секунды (16.11.2011 - 17:01) caballero написал(а):
Цитата
Вот я и пытаюсь на это примере медленно, но верно перебраться на ООП

Говнокод не зависит от того ООП это или нет.

Спустя 45 минут, 27 секунд (16.11.2011 - 17:46) twin написал(а):
Цитата (caballero @ 16.11.2011 - 14:01)
Цитата
Вот я и пытаюсь на это примере медленно, но верно перебраться на ООП

Говнокод не зависит от того ООП это или нет.

Я бы больше сказал. В таком виде ООП говнокод куда запашистее простого получится.

McLotos
Не майся дурью, пиши пока процедурно. Рановато еще.

Спустя 12 часов, 54 минуты, 15 секунд (17.11.2011 - 06:41) McLotos написал(а):
twin
Спасибо. Просто процедуры уже поднадоели. Ладно, пойду на ирбис, покопаюсь там. wink.gif

Спустя 3 часа, 44 минуты, 50 секунд (17.11.2011 - 10:25) SlavaFr написал(а):
Цитата (McLotos @ 17.11.2011 - 03:41)
Просто процедуры уже поднадоели. Ладно, пойду на ирбис, покопаюсь там.

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

К стате во всех известных ide есть возможость автоматически отформатировать код.

согласись, что это:

function dd($fileremove)
{
if (file_exists($fileremove))
{
chmod($fileremove, 0777);
if (is_dir($fileremove))
{
$handle = opendir($fileremove);
while ($filename = readdir($handle))
{
if ($filename != "." && $filename != "..")
{
dd($fileremove . "/" . $filename);
}
}


closedir($handle);
rmdir($fileremove);
}
else
{
unlink($fileremove);
}
}
}



удобнее читать чем это:

function dd($fileremove)
{if (file_exists($fileremove))
{chmod($fileremove,0777);
if (is_dir($fileremove))
{$handle = opendir($fileremove);
while($filename = readdir($handle))
if ($filename != "." && $filename != "..")
{dd($fileremove."/".$filename);}
closedir($handle);
rmdir($fileremove);
}
else
{unlink($fileremove);}
}
}

С Уважением

Спустя 1 час, 3 минуты, 11 секунд (17.11.2011 - 11:29) McLotos написал(а):
Ну да, согласен. Нужно покопаться в Notepad++ и посмотреть там эту опцию. Спасибо!

Спустя 14 минут, 3 секунды (17.11.2011 - 11:43) twin написал(а):
Цитата (McLotos @ 17.11.2011 - 08:29)
Ну да, согласен. Нужно покопаться в Notepad++ и посмотреть там эту опцию. Спасибо!

Не надо копаться. Надо привыкать так писать.

Спустя 2 минуты, 43 секунды (17.11.2011 - 11:45) McLotos написал(а):
В последнее время слишком ко многим вещам приходится привыкать =)
И я никак не могу понять как работать с классами. sad.gif

Спустя 1 час, 25 минут, 27 секунд (17.11.2011 - 13:11) twin написал(а):
Цитата (McLotos @ 17.11.2011 - 08:45)
В последнее время слишком ко многим вещам приходится привыкать =)
И я никак не могу понять как работать с классами. sad.gif

Ничего страшного))) Я сам до конца не знаю, однако это не мешает.
Более того, я очень мало знаю людей, кто действительно знает, как это делается по настоящему.

Спустя 10 минут, 58 секунд (17.11.2011 - 13:22) McLotos написал(а):
Хммм... нужно будет попробовать накатать какой-нибудь класс, хотябы из тех функций, которые уже готовы. Позже выложу на растерзание публике =)

Спустя 1 час, 1 минута, 23 секунды (17.11.2011 - 14:23) McLotos написал(а):
Говорят "если долго мучиться, что-нибудь получится".
А я вот весь день пытался написать хотябы 1 простейший класс, понял что у меня мозг не вопринимает эту структуру, и решил пока остаться на функциональном программировании. Может по ходу пьесы я и буду пробовать писать классы, но чувствую это будет очень не скоро. sad.gif


_____________
программирование - инструмент для решения конкретных задач, любая попытка спроектировать что-то универсальное приведет к провалу.©paul85
В любом случае тебе прийдётся пройти путь изобретения велосипеда, который прошли другие, только причиной твоего изобретения будет непонимание принципов работы велосипеда изобретённого другими людьми.©SlavaFr
jQuery это попытка использовать АН-225 для перевозки зубочистки
Быстрый ответ:

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