Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [ABSTRACT][INTERFACE][STATIC][SINGLETON] Klasa abstrakcyjna, interfejs metody statyczne
vokiel
post
Post #1





Grupa: Zarejestrowani
Postów: 2 592
Pomógł: 445
Dołączył: 12.03.2007

Ostrzeżenie: (0%)
-----


Witam, przeczytałem zawartość działu OOP na temat klasa abstrakcyjna + interfejs. Jednak w większości nie był poruszany temat metod statycznych, a tym bardziej singletona.

Zaplanowałem sobie taki mały systemik logowań zdarzeń. Chciałem oprzeć go o klase abstrakcyjną + interfejs, a przy okazji chciałem użyć do tego celu singletona, aby późniejsze wywołanie mogło sprowadzić się do:
  1. <?php
  2. dbLog::write()->error();
  3. dbLog::write()->warning();
  4. ?>

Oto co próbowałem zrobić, jednak to nie działa, dostaję błąd:
Kod
Fatal error: Can't inherit abstract function logInterface::write() (previously declared abstract in log) in C:\xampp\htdocs\test.php on line 10


  1. interface logInterface {
  2. public static function write();
  3. public function error();
  4. public function warning();
  5. public function notice();
  6. }
  7. abstract class log implements logInterface{
  8. protected static $_instance = null;
  9. protected function __construct(){}
  10. protected function __clone(){}
  11.  
  12. abstract public static function write();
  13.  
  14. abstract public function error();
  15. abstract public function warning();
  16. abstract public function notice();
  17. }
  18. class fileLog extends log implements logInterface {
  19. public static function write(){
  20. return is_null(parent::$_instance) ? parent::$_instance = new fileLog() : parent::$_instance;
  21. }
  22. public function error(){echo 'fileLog - error';}
  23. public function warning(){echo 'fileLog - warning';}
  24. public function notice(){echo 'fileLog - notice';}
  25. }
  26. class dbLog extends log implements logInterface {
  27. public static function write(){
  28. return is_null(parent::$_instance) ? parent::$_instance = new dbLog() : parent::$_instance;
  29. }
  30. public final function error(){echo 'dbLog - error';}
  31. public final function warning(){echo 'dbLog - warning';}
  32. public final function notice(){echo 'dbLog - notice';}
  33. }


Myślałem o przeniesieniu metody write() do klasy abstrakcyjnej log, zrobienie z niej static (czyt final static)

Ewentualnie mógłbym zrobić w każdej metodzie error, warning, notice odwoływanie się do singletona tak, żeby użycie uprościć do
  1. <?php
  2. dbLog::error();
  3. fileLog::notice();
  4. ?>


Macie jakieś pomysły jak to rozwiązać?


--------------------
Go to the top of the page
+Quote Post

Posty w temacie


Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 21.08.2025 - 03:48