За последние 24 часа нас посетили 201185 программистов и 2096 роботов. Сейчас ищут 1704 программиста ...

Static function DbFactory::createConnection() should not be

Тема в разделе "PHP для новичков", создана пользователем Guliver, 18 окт 2014.

  1. Guliver

    Guliver Новичок

    С нами с:
    26 июн 2013
    Сообщения:
    72
    Симпатии:
    0
    Привет всем. Помогите решить проблему. Перенес сайт на другой хост. Появляется такая ошибка: Strict Standards: Static function DbFactory::createConnection() should not be abstract in /home/lookings/public_html/application/core/db.php on line 20

    листинг db.php
    Код (Text):
    1. <?php
    2.  
    3. //Класс DB - класс подключения к БД
    4. abstract class DB {
    5.  
    6.     //параметры соединения
    7.     private $conn = array();
    8.  
    9.     //open - открытие соединения
    10.     abstract function open();
    11.  
    12.     //close - закрытие соединения
    13.     abstract function close();
    14. }
    15.  
    16. //Абстрактная фабрика
    17. abstract class DbFactory {
    18.  
    19.     //метод для создания объекта соединения с БД
    20.     abstract public static function createConnection($conn);
    21. }
    22.  
    23. //класс создатель MongoConnection
    24. class MongoDbFactory extends DbFactory {
    25.  
    26.     public static function createConnection($conn) {
    27.         return new MongoConnection($conn);
    28.     }
    29. }
    30.  
    31. //класс создатель MysqlConnection
    32. class MysqlDbFactory extends DbFactory {
    33.  
    34.     public static function createConnection($conn) {
    35.         return new MysqlConnection($conn);
    36.     }
    37. }
     
  2. Ganzal

    Ganzal Суперстар
    Команда форума Модератор

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    Re: Static function DbFactory::createConnection() should not

    на новом хостинге версия пхп новее чем на старом. обновить код под новые стандарты.
     
  3. rognorog

    rognorog Новичок

    С нами с:
    7 июл 2014
    Сообщения:
    330
    Симпатии:
    0
    Re: Static function DbFactory::createConnection() should not

    abstract public static function createConnection($conn);
    Strict Standards: Static function DbFactory::createConnection() should not be abstract in...
     
  4. smitt

    smitt Старожил

    С нами с:
    3 янв 2012
    Сообщения:
    3.166
    Симпатии:
    65
  5. Guliver

    Guliver Новичок

    С нами с:
    26 июн 2013
    Сообщения:
    72
    Симпатии:
    0
    Re: Static function DbFactory::createConnection() should not

    Переделал вот так:
    Код (Text):
    1. <?php
    2.  
    3. //Класс DB - класс подключения к БД
    4. abstract class DB {
    5.  
    6.     //параметры соединения
    7.     private $conn = array();
    8.  
    9.     //open - открытие соединения
    10.     abstract function open();
    11.  
    12.     //close - закрытие соединения
    13.     abstract function close();
    14. }
    15.  
    16. interface I
    17. {
    18. public static function createConnection($conn);
    19. }
    20.  
    21.  
    22. //Абстрактная фабрика
    23. abstract class DbFactory implements I {
    24.     //метод для создания объекта соединения с БД
    25.      public function createConnection($conn);
    26. }
    27.  
    28. //класс создатель MongoConnection
    29. class MongoDbFactory extends DbFactory {
    30.  
    31.     public static function createConnection($conn) {
    32.         return new MongoConnection($conn);
    33.     }
    34. }
    35.  
    36. //класс создатель MysqlConnection
    37. class MysqlDbFactory extends DbFactory {
    38.  
    39.     public static function createConnection($conn) {
    40.         return new MysqlConnection($conn);
    41.     }
    42. }

    Выдает теперь ошибку Fatal error: Non-abstract method DbFactory::createConnection() must contain body in /home/lookings/public_html/application/core/db.php on line 26
     
  6. rognorog

    rognorog Новичок

    С нами с:
    7 июл 2014
    Сообщения:
    330
    Симпатии:
    0
    Guliver, мда... даже разными цветами показал, специально, думал допрет =)
    Ну кароче убери статик, а абстракт оставь.
    Кто-то похоже плохо читал мануал.
    Прочитай, про структуру интерфейсов.
     
  7. Guliver

    Guliver Новичок

    С нами с:
    26 июн 2013
    Сообщения:
    72
    Симпатии:
    0
    Re: Static function DbFactory::createConnection() should not

    Если бы так все просто. Это первое что я попытался сделать. Там потом ошибка за ошибкой Fatal error: Cannot make non static method DbFactory::createConnection() static in class MongoDbFactory in /home/lookings/public_html/application/core/db.php on line 29
     
  8. rognorog

    rognorog Новичок

    С нами с:
    7 июл 2014
    Сообщения:
    330
    Симпатии:
    0
    Re: Static function DbFactory::createConnection() should not

    Ну что, поделать, сочувствую о юный подаван =)
    Но этот скрипт подлежит серьезным правкам.
     
  9. Guliver

    Guliver Новичок

    С нами с:
    26 июн 2013
    Сообщения:
    72
    Симпатии:
    0
    Re: Static function DbFactory::createConnection() should not

    Спасибо всем. Проблема решена. Почитал мануал и все готово. Приблизительно все выглядит вот так
    Код (Text):
    1. <?php
    2. interface I
    3. {
    4. static public function f();
    5. }
    6.  
    7. abstract class C implements I
    8. {
    9. // more/other methods go here
    10. }
    11.  
    12. class D extends C
    13. {
    14. static public function f()
    15. {
    16. echo 'I am f().';
    17. }
    18. }
    19. ?>
     
  10. rognorog

    rognorog Новичок

    С нами с:
    7 июл 2014
    Сообщения:
    330
    Симпатии:
    0
    Re: Static function DbFactory::createConnection() should not

    У интерфейса могут быть только публичные действия, не защищенных не приватных, быть не может, собственно public в определении лишний.
    За место такого велоси-беда =), лучше бы занялся ООП =)
    Какой - то геморой сам себе создаешь =)
    А методы можно переопределять и без интерфейса и абстракции =)))