![]() |
Tematy na forum Pro mogą zakładać jedynie moderatorzy. W otwartych tematach może pisać każdy, kto ma coś fachowego do powiedzenia. Wszystkie posty nie wnoszące nic do tematu będą natychmiast usuwane, a ich autorzy dostaną ostrzeżenie.
Jeśli uważasz, że jakiś temat jest warty dyskusji na tym forum, zgłoś go w temacie Propozycje.
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 27 Pomógł: 0 Dołączył: 14.05.2003 Ostrzeżenie: (0%) ![]() ![]() |
Witam, ostatnio zastanawiam sie w jaki sposob napisac jadro systemu webowego w php - doszedlem do wniosku, ze najlepiej uzyc singletonow do tworzenia instancji klas (db, io, klasa sesji, szablonow itp.) czy jednak lepiej aby jadro bylo rozproszone (wiele klas, kazda posiadajaca metode instance() ) czy raczej napisac jeszcze jednak klase Kernela, ktora to klasa przechowywala by w sobie metody tworzenia instancji i instancje wszystkich podsystemow, oraz kontrolowala wszelkie proby uzyskania takiej instancji ?
Jestem ciekaw jak wy to widzicie ? w jaki sposob wy pisaliscie rdzen systemu ? |
|
|
![]() |
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 204 Pomógł: 0 Dołączył: 26.12.2003 Skąd: Rzeszów Ostrzeżenie: (0%) ![]() ![]() |
U mnie jak na razie (a pewnie zmieni się 100 razy) wygląda to tak:
Użycie: [php:1:650229d311]<?php @require 'Main.php'; Main::set('Controller', new Controller); ?>[/php:1:650229d311] Klasa Main: [php:1:650229d311]<?php final class Main { private static $references = array(); public static function set($className, $reference) { self::$references[$className] = $reference; } public static function get($className) { if(array_key_exists($className, self::$references)) { return self::$references[$className]; } } public static function load($name, $notClass = false, $notReport = false) { [ciach] } } function __autoload($className) { Main::load($className); } ?>[/php:1:650229d311] Klasa Controller: [php:1:650229d311]<?php final class Controller { public function __construct() { Main::load('functions/main', true); Main::load('functions/page', true); Main::set('Page', new Template('Main')); Main::set('ErrorHandler', new ErrorHandler); Main::set('Client', new Client); $cfg = new Cfg('db'); Main::set('SQL', new mysqli( $cfg->get('host'), $cfg->get('user'), $cfg->getDecoded('pass'), $cfg->get('db') ) ); Main::set('SessionHandler', new SessionHandler); Main::set('Rewrite', new Rewrite('sdd')); Main::get('Rewrite')->set(0, 'home'); Main::get('Rewrite')->set(1, 0); Main::get('Rewrite')->set(2, 0); } } ?>[/php:1:650229d311] Główna różnica w porównianiu z Twoją (Balin) klasą polega na tym, że obiekty można konstruować z parametrami (czasem się przydaje). Nie tak dawno używałem czegoś podobnego do Twojego, jednak uznałem, że obecne rozwiązanie ma więcej zalet. Można na przykład przechowywać dowolną ilość instancji tej samej klasy pod innymi nazwami. Napisz co o tym myślisz. |
|
|
![]() ![]() |
![]() |
Aktualny czas: 5.10.2025 - 20:19 |