Diskuze: require_once a class
V předchozím kvízu, Online test znalostí PHP, jsme si ověřili nabyté zkušenosti z kurzu.

Člen

Zobrazeno 6 zpráv z 6.
V předchozím kvízu, Online test znalostí PHP, jsme si ověřili nabyté zkušenosti z kurzu.
Ahoj, nevím, jak složitý děláš systém, jestli máš něco, co ti dokáže tu instanci zprostředkovat (nějaké DI), jestli potřebuješ lazy-load atd. Pokud pracuješ jen na něčem jednoduchém, tak bych se nebál k databázi připojovat v každém požadavku (stejně to asi bude vyžadovat), takže bych měl zaváděcí soubor, např. index.php, ve kterém budeš mít
<?php
require_once "config.php"; // vloží proměnnou $config s údaji
require_once "Database.php"; // třída Database
$db = new Database($config["database"]["server"], $config["database"]["user"], ...);
a pak kdekoliv v aplikaci můžeš proměnnou $db
použít a
nemusíš pokaždé tvořit nové instance.
Využiješ tedy klasicky konstruktor třídy, který je k tomu přímo určený.
Rozhodně se vyhni postupům, kdy by si ty závislosti třída obstarala nějak sama. Tzn. rozhodně NE tyto případy:
// třída to bude mít natvrdo ve svém kódu
class Database
{
private $dbServer = "localhost";
private $user = "root";
private $password = "123456";
}
// třída si to sebere z globálního prostoru
class Database
{
public function __construct()
{
$this->dbServer = $GLOBALS["config"]["database"]["server"];
$this->user = $GLOBALS["config"]["database"]["server"];
// stejný případ i kdybys udělal
global $config;
$this->dbServer = $config["database"]["server"];
$this->user = $config[["database"]["server"];
}
}
// třída bude obsahovat jakési include, aby si to natahala sama
class Database
{
public function __construct()
{
$config = require_once "config.php";
$this->dbServer = $config["database"]["server"];
$this->user = $config[["database"]["server"];
}
}
Úžasný, skvělý!
Ještě na to třeba zítra mrknu a zapřemýšlím (pro mě zas něco nového),
doplním do zbytku kódu, celé upravím (takže raději bohužel více
nekomentuji) ale zabralo to!
U konfigů bych se nebál ani statiky, tak jak je to například v místním redakčním systému.
class Config {
public static $db_host = 'localhost';
public static $db_user = 'root';
}
Zobrazeno 6 zpráv z 6.