Правильно ли я создал класс? Парни, я создал первый в жизни класс. Точнее два (страница и товар).
Я пока учусь. Посмотрите пожалуйста, есть ли ГРУБЫЕ ошибки в грамматике кода. И вообще это ООП стиль или пока еще процедурный?h1 = ''.$text.'';
}

public function append_Content($content)
{
$this->content .= $content;
}

public function insert_Css($res)
{
$this->css[] = $res;
}

private function css_files2html($arr)
{
if(!is_array($arr) || count($arr) == 0)
{
return;
}

static $code;

foreach($arr as $v)
{
$code .= '';
}

return $code;
}

public function createPage()
{
$repl = array(
'{content}' => $this->h1.''.$this->content.'',
'{links}' => $this->css_files2html($this->css)
);

return strtr(file_get_contents('theme/template.html'), $repl);
}
}
class myProduct
{
private $id;
private $name;
private $price;
public function __construct($id, $name, $price)
{
$this->id = $id;
$this->name = $name;
$this->price = $price;
}

public function __destruct()
{
}

public function product_Create()
{
static $code;

$code = 'id.'">';
$code .= ''.$this->name.'';
$code .= 'Цена: '.$this->price.' руб.';
$code .= '';

return $code;
}
}
/************* CODE *************/
$page = new myPage();
echo $page->insert_Css('/theme/main.css');
echo $page->insert_Css('/theme/print.css');
$url = 'about/'; //temp
$result = $mysqli->query("SELECT * FROM `pages` WHERE `url` = '".$url."'");
if($result->num_rows == 1)
{
$row = $result->fetch_assoc();

$page->set_h1($row['h1']); //set h1
$page->append_Content($row['text']); //append text of page
}
else
{
$page->set_h1('404 Page not found');
}
$result->close();
//random append content for page
$page->append_Content(file_get_contents('theme/promo_block.html'));
//Вывод будет потом из БД.
$temp_pro = array(
1 => array('name' => 'Товар1', 'price' => '1000'),
2 => array('name' => 'Товар2', 'price' => '4000'),
3 => array('name' => 'Товар3', 'price' => '2000')
);
$product_obj = '';
foreach($temp_pro as $key => $val)
{
$product_obj = new myProduct($key, $val['name'], $val['price']); //create product
$page->append_Content( $product_obj->product_Create() ); // append product
}
echo $page->createPage(); //output page
Меня особенно волнует правильно ли я наполняю переменные для return-на. Не люблю кгда return много строчный. В классе я так понял это статичная переменная лучше подходит.

21 Авг 2019 в 07:05
176 +1
0
Ответы
1

Код, который вы написали, вполне соответствует объектно-ориентированному программированию (ООП). Однако есть несколько замечаний:

В методе css_files2html у вас используется статическая переменная $code, которая не очищается перед каждым вызовом метода. Это может привести к накоплению значений от предыдущих вызовов. Лучше не использовать статические переменные в данном случае.

В методе product_Create у вас также используется статическая переменная $code, которая не является обязательной. Можно просто объявить переменную внутри метода и возвращать ее значение без сохранения состояния между вызовами.

В методе insert_Css вы вызываете метод echo, который не возвращает ничего, поэтому вызов $page->insert_Css не будет отображать ничего. Лучше возвращать результат из данного метода и выводить его вне класса.

В цикле foreach($temp_pro as $key => $val) у вас внутри цикла вы заменяете переменную $product_obj на новый объект. Это приведет к тому, что на выходе из цикла у вас будет только последний созданный объект. Лучше использовать массив для хранения объектов.

При динамическом добавлении контента в класс myPage вы можете использовать методы для возврата этого контента, например, getH1(), getContent() и т.д.

Лучше использовать типизацию аргументов в методах классов (PHP 7+), чтобы улучшить понимание кода и предотвратить ошибки.

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

Надеюсь, эти замечания помогут вам улучшить ваш код. Удачи в дальнейшем изучении ООП!

20 Апр в 13:07
Не можешь разобраться в этой теме?
Обратись за помощью к экспертам
Название заказа не должно быть пустым
Введите email
Бесплатные доработки
Гарантированные бесплатные доработки
Быстрое выполнение
Быстрое выполнение от 2 часов
Проверка работы
Проверка работы на плагиат
Интересные статьи из справочника
Поможем написать учебную работу
Название заказа не должно быть пустым
Введите email
Доверьте свою работу экспертам
Разместите заказ
Наша система отправит ваш заказ на оценку 84 683 авторам
Первые отклики появятся уже в течение 10 минут
Прямой эфир