Skip to content

Instantly share code, notes, and snippets.

@HavenShen
Last active May 17, 2018 08:30
Show Gist options
  • Save HavenShen/532b0ef9252885371fbfb0af71e6f91d to your computer and use it in GitHub Desktop.
Save HavenShen/532b0ef9252885371fbfb0af71e6f91d to your computer and use it in GitHub Desktop.
Dependency Inversion Principle (DIP).
<?php
// Bad demo
$errorHandler = new ErrorHandler();
set_error_handler(function($errno, $errstr, $errfile, $errline) use ($errorHandler) {
return $errorHandler->error($errno, $errstr, $errfile, $errline);
});
set_exception_handler(function($exception) use ($errorHandler) {
return $errorHandler->exception($exception);
});
class ErrorHandler
{
protected $logger;
public function __construct()
{
$this->logger = new Logger();
}
public function error($errno, $errstr, $errfile, $errline)
{
$this->logger->log('Error:' . $errstr);
// ...display error message to the user
}
public function exception(Exception $exception)
{
$this->logger->log('Error:' . $exception->getMessage());
// ...display error message to the user
}
}
class Logger
{
public function log($message)
{
// ...write error to file
}
}
// Good demo
$logger = new Logger();
$errorHandler = new ErrorHandler($logger);
set_error_handler(function($errno, $errstr, $errfile, $errline) use ($errorHandler) {
return $errorHandler->error($errno, $errstr, $errfile, $errline);
});
set_exception_handler(function($exception) use ($errorHandler) {
return $errorHandler->exception($exception);
});
class ErrorHandler
{
protected $logger;
public function __construct(Logger $logger)
{
$this->logger = $logger;
}
public function error($errno, $errstr, $errfile, $errline)
{
$this->logger->log('Error:' . $errstr);
// ...display error message to the user
}
public function exception(Exception $exception)
{
$this->logger->log('Error:' . $exception->getMessage());
// ...display error message to the user
}
}
class Logger
{
public function log($message)
{
// ...write error to file
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment