Comments 22
Шёл 2016ый год…
Но использование var… Это же PHP начала 2000х годов, когда в мире царствовала версия 4. Это даже если учитывать небольшой опыт — надо очень сильно постараться, чтобы найти какой-то «учебник», где такое написано, примерно как ПК с Pentium 3 на борту. Просто раритет и подрастающее поколение такое даже в глаза не видело нынче.
гибко, читаемо, не костыльно.
Идея может и неплохая, но код… Приведите код к psr-2. Смените кодировку на utf-8. Добавьте тесты. Замените var на нормальную область видимости. Вынесите шаблон и JS код отдельно от класса.
максимально компактный но зависимость от jquery? И как вы сами вообще умудряетесь там всё править в этой мешанине. Ну уже хотя бы как то разделили код метода showFormна части по внутренним темплейтам в heredoc. или вообще зачем там класс тогда, сделали бы просто скрипт, тоже было бы в одном файле но чище. Ну или phar есть.
На самом деле я удивляюсь вашей "смелости". Такое на хабр выкладывать… Идея спорная всё же. А исполнение хуже некуда.
А еще у вас всё плохо с именами переменных. Date где по логике data, safe где должно быть save, Attrebut с одной t. Это я уже не говорю о семантической корректности например имени метода getAtributes
Ну и на худой конец класс сразу же создает бэкап который позволяет вернуться к первоначальной версии.
1. Логика чтения и записи в файл конфигов. Я или очень сильно отстал от жизни, или чего-то не знаю, но зачем делать вот это:
public function getAtributes() {
$conf_str=file_get_contents($this->file_name);
foreach($this->date as $n=>$cf) {
if(preg_match("#".$n."[^\r\n]*//([^\n\r]+)[\n\r]#",$conf_str,$m))
$this->atribute[$n]=trim($m[1]);
}
}
Что вам мешает иметь конфиги вида:
<?php
return [
'param1' => [
'param2' => 'value'
]
];
и делать прямой инклюд данного конфиг-файла как то так:
....
if (!file_exists($path)) {
return;
}
$configArray = include($path); // look at ex#5 http://php.net/manual/en/function.include.php
if (!is_array($configArray)) {
return;
}
и вы получите тот же самый массив конфига без извращений через preg_match*, притом что ниже в конструкторе вы так делаете сами (вопрос — а на*рена этот конструктор там вообще?)
public function __construct($file_name) {
// ....
$this->date = require $this->file_name;
// .....
}
Поехали дальше. Зачем вы делаете замену значений по ключу в строке?
public function safe(){
$conf_str=var_export($this->date,true);
//$atr=$model->getAtribute();
foreach($this->atribute as $n=>$v) {
$conf_str=preg_replace("#([^\n\r]*".$n."[^\n\r]*)[\n\r]#is","\\1//".$v."\n",$conf_str);
}
file_put_contents($this->file_name,"<? \n return ".$conf_str." \n ?>");
}
выглядит так, будто вы специально пытаетесь выстрелить себе в ногу или сломать ее о свой кривой велосипед. Почему вы не работаете со своим же массивом $this->data не обновляя в нем значения переменных из входящего POST а позже не конвертируете финальный результат в str (var_export)? Какую цель вы преследуете, заменяя значения через preg_replace в сконвертированной строке?
2. Смешались в кучу кони-люди. Зачем вы используете синтаксис html/css в теле функций на echo? Я видал всякое, видал echo внутри php конструкций, видал echo и return'ы внутри функций, но чтобы в теле класса содержимое метода представляли вот так:
<?php
class Configer {
function showForm(){ ?>
<style>
#configForm span{display:inline-block; width:150px; }
}
я вижу впервые… не нужно так.
танцы с preg_match и preg_replace там я так понял из-за комментариев. Другое дело что благодаря коду это не очевидно)
Ибо сюда заходят люди, которые хотят прочитать что-то действительно новое и интересное.
А подобные топики нещадно заминусовываются вместе с кармой автора.
У самого таких поделок вагон и маленькая тележка, но они редко попадают даже на личный гитхаб, ибо смысл?
P.S. В нашем же случае — автор просто положил большой болт и понадеялся на непонятно что. Да, можно оценивать его работу, как действительно какую-то работу и сказать ему «спасибо» за это. Ну вклад в сообщество и всё такое…
Но тут немного иная ситуация: Подобная задача решается намного проще, быстрее и качественнее, так что такой «вклад» не только не нужен, сколь вреден. И вреден не только как пример «как не надо писать», но и тем, что он может навредить тому, кто решится его использовать, начиная с безопасности, заканчивая повреждением исходных файлов конфигураций.
Класс для редактирования конфигурационных файлов