Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Тестовое задание [2]

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (2): « 1 [2]   

> Без описания
Bio man
Отправлено: 20 Июня, 2016 - 12:15:00
Post Id


Постоянный участник


Покинул форум
Сообщений всего: 2751
Дата рег-ции: Июль 2010  
Откуда: Даугавпилс, Латвия


Помог: 52 раз(а)




Перегрузки методов и правда не хватает, но люди по разному решают эту задачу.
Например, через статические "конструкторы", как то так
PHP:
скопировать код в буфер обмена
  1. Logger::create();
  2. Logger::createFromConfig(...)

типо того.
karamba пишет:
Как будет использоваться полиморфизм в данном случае? В моем абстрактом классе нет ни одного поля или неабстрактного метода. Если мы создадим экземпляр каждого типа логирования и запишем в массив. Будем массив перебирать и вызывать метод logAdd(), то он будет одинаково работать и при существовании базового класса и без него.
что бы говорить о полиморфизме, обеим сторонам надо знать что это за зверь, у меня нет желанию разжовывать это, и так разжовано уже 100000 раз, надо лишь погуглить.
 
 Top
karamba
Отправлено: 21 Июня, 2016 - 19:50:59
Post Id



Гость


Покинул форум
Сообщений всего: 86
Дата рег-ции: Сент. 2010  


Помог: 0 раз(а)




Цитата:
karamba пишет:
Как будет использоваться полиморфизм в данном случае? В моем абстрактом классе нет ни одного поля или неабстрактного метода. Если мы создадим экземпляр каждого типа логирования и запишем в массив. Будем массив перебирать и вызывать метод logAdd(), то он будет одинаково работать и при существовании базового класса и без него.
что бы говорить о полиморфизме, обеим сторонам надо знать что это за зверь, у меня нет желанию разжовывать это, и так разжовано уже 100000 раз, надо лишь погуглить.


Вот пример
PHP:
скопировать код в буфер обмена
  1. <?PHP
  2.  
  3. abstract class Super {
  4.         abstract function whoAmI();
  5. }
  6.  
  7. class A extends Super {
  8.         function whoAmI(){
  9.                 return "A";
  10.         }
  11. }
  12. class B extends Super {
  13.         function whoAmI(){
  14.                 return "B";
  15.         }
  16. }
  17.  
  18. $a = new A();
  19. $b = new B();
  20. $array = array($a,$b);
  21.  
  22. foreach ($array as &$value) {
  23.     echo $value->whoAmI();
  24. }
  25.  
  26. ?>


В данном случае вывод будет "AB", не зависимо от того будет супер класс или его не будет. Полиморфизм все равно будет работать.
 
 Top
Bio man
Отправлено: 25 Июня, 2016 - 01:03:49
Post Id


Постоянный участник


Покинул форум
Сообщений всего: 2751
Дата рег-ции: Июль 2010  
Откуда: Даугавпилс, Латвия


Помог: 52 раз(а)




это не полиморфизм.
Цитата:
В языках программирования и теории типов полиморфизмом называется способность функции обрабатывать данные разных типов

https://ru.wikipedia.org/wiki/Полиморфизм_(информатика)
и еще

В кратце, полиморфизм в ООП это возможность работать с классами-наследниками, как с родительским.
PHP:
скопировать код в буфер обмена
  1. interface Super
  2. {
  3.         public function whoAmI();
  4. }
  5.  
  6. class A extends Super
  7. {
  8.         public function whoAmI()
  9.         {
  10.                 return "A";
  11.         }
  12. }
  13. class B extends Super
  14. {
  15.         public function whoAmI()
  16.         {
  17.                 return "B";
  18.         }
  19. }
  20.  
  21. function whoAreYou(Super $whoAmI)
  22. {
  23.         echo $whoAmI->whoAmI();
  24. }
  25.  
  26. $a = new A();
  27. $b = new B();
  28.  
  29. whoAreYou($a);
  30. whoAreYou($b);
  31.  

вот в чем разница. Если твои классы не будут унаследованы от какого-то базового, то они по сути будут иметь каждый свой интерфейс, и не важно, что интерфейсы совпадают. Когда появляется базовый класс, то классы-наследники наследуют интерфейс базового класса и у всех классов-наследников интерфейс становится единым, и теперь каждый класс можно заменить другим наследником.

(Отредактировано автором: 25 Июня, 2016 - 01:06:26)

 
 Top
NewUserSince280716
Отправлено: 28 Июля, 2016 - 22:57:58
Post Id


Новичок


Покинул форум
Сообщений всего: 1
Дата рег-ции: Июль 2016  


Помог: 0 раз(а)




Как вам мой вариант?
PHP:
скопировать код в буфер обмена
  1. <?PHP
  2. abstract class Logger{
  3.         protected $massege;
  4.         protected $log_time;
  5.         protected $host = 'localhost';
  6.         protected $user = 'root';
  7.         protected $password = '123';
  8.         protected $db = 'test';
  9.         public function get_date($error){
  10.                 @$this->log_time = date("[Y-m-d H:i:s]").serialize($error);
  11.         }
  12.         public function write_log_in_file(){
  13.         }
  14. }
  15. class FileLogger extends Logger{
  16.         private $way = 'log.txt';
  17.         public function write_log_in_file(){
  18.                 return file_put_contents($this->way, $this->log_time . "\n", FILE_APPEND);
  19.         }
  20. }
  21. class DBLogger extends Logger{
  22.         public function __construct($host = 'localhost', $user = 'root',$password = '123',$db = 'test'){
  23.                 $this->host = $host;
  24.                 $this->user = $user;
  25.                 $this->password = $password;
  26.                 $this->db = $db;
  27.         }
  28.         public function write_log_in_file(){
  29.                 $connect = mysqli_connect($this->host,$this->user,$this->password,$this->db);
  30.                 if (mysqli_connect_errno()) {
  31.                 printf("Connect failed: %s\n", mysqli_connect_error());
  32.                 exit();
  33.                 }
  34.                 $sql = mysqli_query($connect, "INSERT INTO Logg (massege) VALUES('error')");
  35.                 mysqli_close($connect);
  36.         }
  37. }
  38. $Log = new FileLogger('/log.txt');
  39. $Log->get_date('Error');
  40. $Log->write_log_in_file();
  41. $mysqliLog = new DBLogger();
  42. $mysqliLog->write_log_in_file();
  43. ?>
 
 Top
Страниц (2): « 1 [2]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Объектно-ориентированное программирование »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB