J'essaye de construire le site en utilisant OOP en PHP. Tout le monde parle de Singleton, de l'hermétisation, du MVC et de l'utilisation d'exceptions. J'ai donc essayé de le faire comme ceci:Exceptions confusion
bâtiment classe site entier:
class Core
{
public $is_core;
public $theme;
private $db;
public $language;
private $info;
static private $instance;
public function __construct($lang = 'eng', $theme = 'default')
{
if(!self::$instance)
{
try
{
$this->db = new sdb(DB_TYPE.':host='.DB_HOST.';dbname='.DB_NAME, DB_USER, DB_PASS);
}
catch(PDOException $e)
{
throw new CoreException($e->getMessage());
}
try
{
$this->language = new Language($lang);
}
catch(LangException $e)
{
throw new CoreException($e->getMessage());
}
try
{
$this->theme = new Theme($theme);
}
catch(ThemeException $e)
{
throw new CoreException($e->getMessage());
}
}
return self::$instance;
}
public function getSite($what)
{
return $this->language->getLang();
}
private function __clone() { }
}
classe thèmes gestion
class Theme
{
private $theme;
public function __construct($name = 'default')
{
if(!is_dir("themes/$name"))
{
throw new ThemeException("Unable to load theme $name");
}
else
{
$this->theme = $name;
}
}
public function getTheme()
{
return $this->theme;
}
public function display($part)
{
if(!is_file("themes/$this->theme/$part.php"))
{
throw new ThemeException("Unable to load theme part: themes/$this->theme/$part.php");
}
else
{
return 'So far so good';
}
}
}
et l'utilisation:
error_reporting(E_ALL);
require_once('config.php');
require_once('functions.php');
try
{
$core = new Core();
}
catch(CoreException $e)
{
echo 'Core Exception: '.$e->getMessage();
}
echo $core->theme->getTheme();
echo "<br />";
echo $core->language->getLang();
try
{
$core->theme->display('footer');
}
catch(ThemeException $e)
{
echo $e->getMessage();
}
Je ne J'aime ces gestionnaires d'exceptions - je ne veux pas les attraper comme des pokemons ... Je veux utiliser des choses simples: $ core-> theme-> display ('footer'); Et si quelque chose ne va pas, et que le mode débogage est activé, alors l'erreur d'affichage indique. Que devrais-je faire?
Eh bien, je ne fais que commencer, mais cette prise multiple a beaucoup raccourci mon code! J'ai utilisé CoreException parce que je n'ai pas connaissance de cette capture multiple – Misiur