Правильно ли я создал класс? Парни, я создал первый в жизни класс. Точнее два (страница и товар).
Я пока учусь. Посмотрите пожалуйста, есть ли ГРУБЫЕ ошибки в грамматике кода. И вообще это ООП стиль или пока еще процедурный?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 = '';
$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
202 +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 Апр 2024 в 13:07
Не можешь разобраться в этой теме?
Обратись за помощью к экспертам
Гарантированные бесплатные доработки в течение 1 года
Быстрое выполнение от 2 часов
Проверка работы на плагиат
Поможем написать учебную работу
Прямой эфир