MVC фреймворкингизда барча моделларнинг отасини амалга ошириш
Келинг, барча моделларнинг ота классини амалга оширайлик:
<?php
namespace Core;
class Model
{
private $link;
public function __construct()
{
$this->link = mysqli_connect(DB_HOST, DB_USER, DB_PASS, DB_NAME);
mysqli_query($this->link, "SET NAMES 'utf8'");
}
protected function findOne($query)
{
// бу ерда қандайдир код бўлади
}
protected function findMany($query)
{
// бу ерда қандайдир код бўлади
}
}
?>
Кўриб турганингиздек, класс конструкторида биз маълумотлар базасига улашамиз. Аммо, бир муаммо бор: ҳар битта яратилаётган модель (агар контроллернинг битта ҳаракати ичида бир нечта модель бўлса) ўзининг маълумотлар базасига уланишни яратади, бу эса оптимал эмас.
Келинг, шундай қилайликки, маълумотлар базасига
уланиш фақат биринчи яратилган модель учун
яратилсин, қолган моделлар эса аллақачон
яратилган уланишдан фойдалансин. Бунинг учун link
хусусиятини статик қиламиз:
<?php
namespace Core;
class Model
{
private static $link;
public function __construct()
{
if (!self::$link) { // агар хусусият берилмаган бўлса, унда улашамиз
self::$link = mysqli_connect(DB_HOST, DB_USER, DB_PASS, DB_NAME);
mysqli_query(self::$link, "SET NAMES 'utf8'");
}
}
protected function findOne($query)
{
}
protected function findMany($query)
{
}
}
?>
Келтирилган Model класс кодини нусхалаб олинг
ва уни /core/Model.php файлига жойланг.
Ушбу классда findOne услубини амалга оширинг.
Унинг ишлашини текшириб кўринг.
Ушбу классда findMany услубини амалга оширинг.
Унинг ишлашини текшириб кўринг.