За последние 24 часа нас посетили 22833 программиста и 1262 робота. Сейчас ищут 827 программистов ...

Подскажите в чем ошибка?

Тема в разделе "PHP для новичков", создана пользователем Сергей7777777, 14 фев 2019.

Метки:
  1. Сергей7777777

    Сергей7777777 Новичок

    С нами с:
    14 фев 2019
    Сообщения:
    21
    Симпатии:
    0
    [​IMG]
    [​IMG]
    [​IMG] [​IMG]
    [​IMG]
    [​IMG]


    Не получается исправить ошибку, что делать?
    Ошибка: Fatal error: Uncaught Error: Call to a member function add() on null in C:\OSPanel\domains\cmse.ru\engine\cms.php:24 Stack trace: #0 C:\OSPanel\domains\cmse.ru\engine\bootstrap.php(19): engine\cms->run() #1 C:\OSPanel\domains\cmse.ru\index.php(2): require_once('C:\\OSPanel\\doma...') #2 {main} thrown in C:\OSPanel\domains\cmse.ru\engine\cms.php on line 24
    cms.php :
    <code lang="php">
    <?php
    namespace engine;
    class cms{
    /**
    *
    * @var [type]
    */
    private $di;
    public $router;
    /**
    * [_construct description]
    * @param [type] $di [description]
    * @return [type] [description]
    */
    public function _construct($di){
    $this->di = $di;
    $this->router = $this->di->get('router');
    }
    /**
    * Run cms
    */
    public function run(){
    $this->router->add('home', '/', 'HomeController:index');
    print_r($this->di);
    }
    }
    ?>
    </code>
    bootstrap.php :
    <code lang="php">
    <?php
    require_once __DIR__. '/../vendor/autoload.php';
    use engine\cms;
    use engine\DI\di;
    try {
    $di = new DI();
    $services = require __DIR__ . '/config/service.php';
    // init services
    foreach ($services as $service) {
    $provider = new $service($di);
    $provider->init();
    }
    $cms = new cms($di);
    $cms-> run();
    } catch (\ErrorException $e){
    echo $e -> getMessage();
    }
    ?>
    </code>
    index.php :
    <code lang="php">
    <?php
    require_once 'engine/bootstrap.php';
    ?>
    </code>
    di.php :
    <code lang="php">
    <?php
    namespace engine\DI;
    class DI {
    /**
    * @var array
    */
    private $container = [];
    /**
    * @param $key
    * @param $value
    * @return $this
    */
    public function set($key, $value){
    $this->conteiner[$key] = $value;
    return $this;
    }
    /**
    * @param $key
    * @return $mixed
    */
    public function get($key)
    {
    return $this->has($key);
    }
    /**
    * [has description]
    * @param [type] $key [description]
    * @return boolean [description]
    */
    public function has($key){
    return isset($this->$container[$key])? $this->$container[$key] : null;
    }
    }
    ?>
    </code>
    service.php :
    <code lang="php">
    <?php
    return [
    engine\service\database\provider::class,
    engine\service\router\provider::class,
    ];
    ?>
    </code>
     
    #1 Сергей7777777, 14 фев 2019
    Последнее редактирование: 14 фев 2019
  2. yanuzay

    yanuzay Активный пользователь

    С нами с:
    28 мар 2018
    Сообщения:
    498
    Симпатии:
    57
    реализация метода add() где?

    с аргументами метода, видимо что-то не то
     
  3. _ne_scaju_

    _ne_scaju_ Старожил

    С нами с:
    25 ноя 2016
    Сообщения:
    2.149
    Симпатии:
    118
    PHP:
    1. public function run(){
    2. $this->router->add('home', '/',
    3. 'HomeController:index'); print_r($this->di);
    4. }
    5. }
    6. ?>
    у тебя возможно : стоит а нужна . точка
    PHP:
    1. public function run(){
    2. $this->router->add('home', '/',
    3. 'HomeController.index'); print_r($this->di);
    4. }
    5. }
    6. ?>
    или же ты передаешь пустое значение в функцию add() а он ожидает какое то значение.
     
  4. Сергей7777777

    Сергей7777777 Новичок

    С нами с:
    14 фев 2019
    Сообщения:
    21
    Симпатии:
    0
    cms.php:
    PHP:
    1. <?php
    2. namespace engine;
    3. class cms{
    4.   /**
    5.    *
    6.    * @var [type]
    7.    */
    8.   private $di;
    9.   public $router;
    10. /**
    11. * [_construct description]
    12. * @param  [type] $di [description]
    13. * @return [type]     [description]
    14. */
    15. public function _construct($di){
    16. $this->di = $di;
    17. $this->router = $this->di->get('router');
    18. }
    19. /**
    20. * Run cms
    21. */
    22. public function run(){
    23.  
    24. $this->router->add('home', '/', 'HomeController:index');
    25.  
    26. print_r($this->di);
    27. }
    28. }
    29. ?>
    Вот это?
     
  5. yanuzay

    yanuzay Активный пользователь

    С нами с:
    28 мар 2018
    Сообщения:
    498
    Симпатии:
    57
    а понял у тебя $this->router равен null внутри этого метода run()
    Т.е. $this->router недоступен внутри метода run() или просто не определено его значение
     
  6. Сергей7777777

    Сергей7777777 Новичок

    С нами с:
    14 фев 2019
    Сообщения:
    21
    Симпатии:
    0
    И что делать? Я чайник
     
  7. yanuzay

    yanuzay Активный пользователь

    С нами с:
    28 мар 2018
    Сообщения:
    498
    Симпатии:
    57
    похоже в файле di.php в методе has у тебя и присваивается null.

    Ты передаешь аргумент $key , значение которого равно router, но значение ключа router не задано методом set()
    PHP:
    1. public function has($key){
    2. return isset($this->$container[$key])? $this->$container[$key] : null;
    3. }
     
  8. Сергей7777777

    Сергей7777777 Новичок

    С нами с:
    14 фев 2019
    Сообщения:
    21
    Симпатии:
    0
    Что где нужно поменять, помогите пожалуйста
     
  9. mkramer

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

    С нами с:
    20 июн 2012
    Сообщения:
    8.555
    Симпатии:
    1.754
    @Сергей7777777, не по своему уровню взялся. Возьми почитай книжку, и решай нормальные задачки для чайника, типа вывести сумму двух чисел. И никогда больше не выкладывай код скринами, в следующий раз буду удалять. Есть для этого теги [php][/php] или кнопка upload_2019-2-14_16-46-22.png
     
  10. Сергей7777777

    Сергей7777777 Новичок

    С нами с:
    14 фев 2019
    Сообщения:
    21
    Симпатии:
    0
    Я уже понял. Кто нибудь поможет? я записался на курсы мне нужно это сделать, помогите пожалуйста.
     
  11. MouseZver

    MouseZver Суперстар

    С нами с:
    1 апр 2013
    Сообщения:
    7.751
    Симпатии:
    1.322
    Адрес:
    Лень
    Нам это стоит понимать, почему у тебя в роутер заносится null ?

    Теперь задай вопрос самому компу, он тебе поможет ? Лишь посветит в глаза своими пикселями, от того как ты сформулируешь ход своих мыслей.
     
  12. Сергей7777777

    Сергей7777777 Новичок

    С нами с:
    14 фев 2019
    Сообщения:
    21
    Симпатии:
    0
    Супестар ты очень умный, ну я не чего не понял. Можно простым языком
     
  13. MouseZver

    MouseZver Суперстар

    С нами с:
    1 апр 2013
    Сообщения:
    7.751
    Симпатии:
    1.322
    Адрес:
    Лень
    11010000100111001101000010110101110100011000000111010001100000101101000010111110001000001101000110000010110100001011111011010000101100111101000010111110001011000010000011010001100001111101000110000010110100001011111011010000101100011101000110001011001000001101000010111011110100001011100011010001100010001101000010111101110100001011100011010000101110010010000011010001100000001101000010110000110100001011011100100000110100001011111111010000101110001101000110000001110100001011000011010001100000101101000110001100001000001101000010111110001000001101000110000010110100001011001011010000101111101101000010110101110100001011110000100000110100011000001111010001100000001101000010111110110100001011001011010000101111011101000010110101001000001101000010111000110100001011110111010001100000101101000010110101110100001011101111010000101110111101000010110101110100001011101011010001100000101101000010110000001011000010000011010000101100101101000010110111110100011000111111010000101110110010000011010000101100011101000110001011001000001101000010111000001000001101000110000011110100001011011111010000101111011101000010110000110100001011101100100000001000101101000010111111110100001011111011010001100001111101000010110101110100001011110011010001100000110010000001101110011101010110110001101100001000100010111000100000110100001001001000100000110100001011101011010000101110111101000010110000110100011000000111010001100000011101000010110101001000000100010001001001001000000011000100110100001000001101000110000001110100011000001011010001100000001101000010111110110100001011101011010000101100000010110000100000110100001011111011010001100010001101000010111000110100001011000111010000101110101101000010110000001000001101000010110011110100011000000011010000101100001101000010111100110100001011110011010000101100001101000110000010110100001011100011010001100001111101000010110101110100011000000111010000101110101101000010110000110100011000111100101110
     
    mkramer нравится это.
  14. Сергей7777777

    Сергей7777777 Новичок

    С нами с:
    14 фев 2019
    Сообщения:
    21
    Симпатии:
    0
    понятно, спасибо за помощь друг
     
  15. MouseZver

    MouseZver Суперстар

    С нами с:
    1 апр 2013
    Сообщения:
    7.751
    Симпатии:
    1.322
    Адрес:
    Лень
    Не за что. Рад помочь!
     
  16. _ne_scaju_

    _ne_scaju_ Старожил

    С нами с:
    25 ноя 2016
    Сообщения:
    2.149
    Симпатии:
    118
    я тоже думал зачем 010 и т.д. Маус написал, но когда он мне обьяснил я ржал с этого, подсказка: скопируй этот код с нулями и единицами, переведи с бинарного кода на текстовый.
    Подсказка 2: яндекс и гугл в помощь.
    Подсказка 3 перевести этот текс онлайн переводчиком бинарных кодов и там уже вставляешь эти нули и единицы!
    И дальше поймешь что нужно тебе сделать, хотя врядли, в коде нужно будет подумать элементарная ошибка, о которой я тебе не могу сказать так как не я ее нашел, а маусзверь. Удачи!
     
  17. Сергей7777777

    Сергей7777777 Новичок

    С нами с:
    14 фев 2019
    Сообщения:
    21
    Симпатии:
    0
    Спасибо за подсказку пробую
    --- Добавлено ---
    вот что вышло
    Результат: Место того, чтобы лишний раз писать о твоем уровне интеллекта, взял бы и узнал "почему null". В классе DI 14 строка, ошибка грамматическая.
     
  18. _ne_scaju_

    _ne_scaju_ Старожил

    С нами с:
    25 ноя 2016
    Сообщения:
    2.149
    Симпатии:
    118
    ну и вывод какод, решение нашел?
     
  19. Сергей7777777

    Сергей7777777 Новичок

    С нами с:
    14 фев 2019
    Сообщения:
    21
    Симпатии:
    0
    Нет, смотрю класс di 14 строку
    PHP:
    1. <?php
    2. namespace engine\DI;
    3. class DI {
    4.   /**
    5.   * @var array
    6.   */
    7.   private $container = [];
    8.   /**
    9.    * @param $key
    10.    * @param $value
    11.    * @return $this
    12.    */
    13.   public function set($key, $value){
    14.   $this->conteiner[$key] = $value;
    15.   return $this;
    16.   }
    17. /**
    18. * @param $key
    19. * @return $mixed
    20. */
    21.  
    22.  
    23.   public function get($key)
    24.   {
    25.     return $this->has($key);
    26.   }
    27.   /**
    28.    * [has description]
    29.    * @param  [type]  $key [description]
    30.    * @return boolean      [description]
    31.    */
    32.   public function has($key){
    33.   return isset($this->$container[$key])? $this->$container[$key] : null;
    34.  
    35.   }
    36.  
    37. }
    38.  
    39. ?>
    --- Добавлено ---
    Нашел ошибку грамотическую, в слове container, исправил, но все равно ошибка
    Код (Text):
    1. Fatal error: Uncaught Error: Call to a member function add() on null in C:\OSPanel\domains\cmse.ru\engine\cms.php:24 Stack trace: #0 C:\OSPanel\domains\cmse.ru\engine\bootstrap.php(20): engine\cms->run() #1 C:\OSPanel\domains\cmse.ru\index.php(2): require_once('C:\\OSPanel\\doma...') #2 {main} thrown in C:\OSPanel\domains\cmse.ru\engine\cms.php on line 24
     
  20. _ne_scaju_

    _ne_scaju_ Старожил

    С нами с:
    25 ноя 2016
    Сообщения:
    2.149
    Симпатии:
    118
    вот ответь мне, пожалуйста что в 14 строке не так, я же сказал не могу указать так как не я нашел эту ошибку, просто прочитай строку 10 раз только читай 14 а не 15 и т.д. Внимательно!!!
     
  21. Сергей7777777

    Сергей7777777 Новичок

    С нами с:
    14 фев 2019
    Сообщения:
    21
    Симпатии:
    0
    Нашел ошибку грамотическую,
    Я нашел в слове container ошибку, еще какая то?
    --- Добавлено ---
    В чем еще может быть проблема?
     
  22. _ne_scaju_

    _ne_scaju_ Старожил

    С нами с:
    25 ноя 2016
    Сообщения:
    2.149
    Симпатии:
    118
    ура ты начинаешь понимать, хотя возможно, да я сам новичек хотя учу php больше тебя, язык мне этот дается крайне тяжело, у меня логика подводит меня, это отступление. Как ты исправил 14 строку покажи, если исправил выкидывает ли тебе еще ошибки?
     
  23. Сергей7777777

    Сергей7777777 Новичок

    С нами с:
    14 фев 2019
    Сообщения:
    21
    Симпатии:
    0
    Исправленный код :
    PHP:
    1. <?php
    2. namespace engine\DI;
    3. class DI {
    4.   /**
    5.   * @var array
    6.   */
    7.   private $container = [];
    8.   /**
    9.    * @param $key
    10.    * @param $value
    11.    * @return $this
    12.    */
    13.   public function set($key, $value)
    14.   {
    15.   $this->container[$key] = $value;
    16.  
    17.   return $this;
    18.   }
    19. /**
    20. * @param $key
    21. * @return $mixed
    22. */
    23.  
    24.  
    25.   public function get($key)
    26.   {
    27.     return $this->has($key);
    28.   }
    29.   /**
    30.    * [has description]
    31.    * @param  [type]  $key [description]
    32.    * @return boolean      [description]
    33.    */
    34.   public function has($key){
    35.   return isset($this->$container[$key])? $this->$container[$key] : null;
    36.  
    37.   }
    38.  
    39. }
    40.  
    41. ?>
    ПОсле исправления выдает ошибку
    Код (Text):
    1.  
    2. Fatal error: Uncaught Error: Call to a member function add() on null in C:\OSPanel\domains\cmse.ru\engine\cms.php:24 Stack trace: #0 C:\OSPanel\domains\cmse.ru\engine\bootstrap.php(20): engine\cms->run() #1 C:\OSPanel\domains\cmse.ru\index.php(2): require_once('C:\\OSPanel\\doma...') #2 {main} thrown in C:\OSPanel\domains\cmse.ru\engine\cms.php on line 24
     
  24. _ne_scaju_

    _ne_scaju_ Старожил

    С нами с:
    25 ноя 2016
    Сообщения:
    2.149
    Симпатии:
    118
    а доллар куда дел перед conta.....
    Хотя как то страно через $this-> использовать доллар)
    покажи 24 строку
     
  25. Сергей7777777

    Сергей7777777 Новичок

    С нами с:
    14 фев 2019
    Сообщения:
    21
    Симпатии:
    0
    Попробовал поставить доллар все равно ошибка такая же, 24 строчку откуда?