Portál AbcLinuxu, 2. listopadu 2025 12:01
soubor inc.php
$cont = false;
$cont .= 'Nějaký text';
$cont .= 'Nějaký jiný text';
soubor class.php
class sel{
public function __construct(){
include_once(ABSPATH.'/inc.php');
}
}
soubor index.php
include_once(ABSPATH.'/class.php');
$cont = new sel();
echo $cont;
__toString(), ale jeví se mi to jako cesta do pekel.
function __toString() {
include_once(ABSPATH.'/inc.php');
return $cont;
}
Fungovat by to mělo, ale je to celé hrozně nepřehledné. Opravdu to nemůžeš napsat pořádně?
Opravdu to nemůžeš napsat pořádně?Díky, určitě můžu, a poradíš jak to myslíš?
//soubor inc.php
class inc{
protected $cont;
public function __construct(){
$this->cont = false;
$this->cont .= 'Nějaký text';
$this->cont .= 'Nějaký jiný text';
}
}
//soubor sel.php
class sel extends inc{
public function __toString(){
return $this->cont;
}
}
//soubor index.php
function __autoload($class){
include(ABSPATH.'/'.$class.'.php');
}
$cont = new sel();
echo $cont;
Jakých souborů je spousta?Souborů inc.php, akorát mají jinou cestu..
/novinky/inc.php /home/inc.php /kontakty/inc.php
Nemůžeš sem napsat, o co konkrétně se snažíš?Snažím se pomocí class zobrazit obsah souboru dle zadané url. Pokud nekdo zadá url
/novinky/tak se načte obsah souboru /novinky/inc.php
/kontakty/tak se načte obsah souboru /kontakty/inc.php. atd.. Díky
//soubor $modul/inc.php $this->cont = false; $this->cont .= 'Nějaký text'; $this->cont .= 'Nějaký jiný text';
//soubor sel.php
class sel{
private $cont;
public function __construct($modul) {
include(ABSPATH.'/'.$modul.'/inc.php');
}
public function __toString(){
return $this->cont;
}
}
//soubor index.php
function __autoload($class){
include(ABSPATH.'/'.$class.'.php');
}
$cont = new sel($modul);
echo $cont;
// Společný soubor všem částem webu
class Page {
// ... cokoliv používáš všude
protected $title = '(undefined)';
protected $config = array(); // tady máš nějaké volby
public function getTitle() {
return $this->title;
}
public function setPageConfig() {
return $this->title;
}
// tato metoda by mohla byt abstract
public function getContent() {
// obecna stranka proste jen zobrazi index.html
readfile($this->config['base_dir'].'index.html');
}
}
// novinky/main.php
class Novinky extends Page {
protected $title = "Novinky"; // getter je zděděn
public function createContent() {
// nacteni novinek
$q = dibi::select('news.*, ...');
if (isset($this->config['lang'])) {
// pokud bylo zadano '/news/...'
$q->where('news.Lang = %s', $this->config['lang']);
}
if (isset($this->config['path'][0])) {
// pokud je url ve tvaru '/*/id'
$q->where('news.id = %s', $this->config['path'][0]);
}
// ... cokoliv potřebuješ
}
}
O samotné zpracování těchto tříd se pak postará index.php, na který na serveru nasměruješ úplně všecko.
// index.php
$path = explode('/', trim($_SERVER['REQUEST_URI'], '/'));
$page = isset($path[0]) ? $path[0] : '/'; // ošetření prázdné cesty (/)
$page_map = array(
'/' => array('class' => 'Page', 'base_dir' => './home/'),
'kontakty' => array('class' => 'Kontakty'),
'novinky' => array('class' => 'Novinky'),
'news' => array('class' => 'Novinky', 'lang' => 'en'),
);
$page_config = $page_map[$page];
$page_config['path'] = array_slice($path, 1);
$class_name = $page_config['class'];
function __autoload($c) {
include('class/'.strtolower($c).'.class.php');
// dle tveho umisteni souboru s tridama
}
if (class_exists($class_name)) {
$p = new $class_name();
$p->setConfig($page_config);
$p->createContent();
} else {
header("Status: 404 Not Found");
echo 'Sorry, page not found!';
}
Ve výsledku to dopadne tak, že pokud uživatel vleze na adresu http://example.com/, tak se mu zobrazí soubor ./home/index.html a pokud na http://example.com/novinky/1, tak se mu zobrazí novinka s ID 1.
Prostým přidáváním tříd a záznamů do pole $page_map si můžeš aplikaci dle libosti rozšiřovat a přitom se z toho nezblázníš.
A až tě to přestane bavit, tak sáhni po nějakém pěkném frameworku.
Tiskni
Sdílej:
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.