Не получается исправить ошибку, что делать? Ошибка: 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>
PHP: public function run(){ $this->router->add('home', '/', 'HomeController:index'); print_r($this->di); } } ?> у тебя возможно : стоит а нужна . точка PHP: public function run(){ $this->router->add('home', '/', 'HomeController.index'); print_r($this->di); } } ?> или же ты передаешь пустое значение в функцию add() а он ожидает какое то значение.
cms.php: 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); } } ?> Вот это?
а понял у тебя $this->router равен null внутри этого метода run() Т.е. $this->router недоступен внутри метода run() или просто не определено его значение
похоже в файле di.php в методе has у тебя и присваивается null. Ты передаешь аргумент $key , значение которого равно router, но значение ключа router не задано методом set() PHP: public function has($key){ return isset($this->$container[$key])? $this->$container[$key] : null; }
@Сергей7777777, не по своему уровню взялся. Возьми почитай книжку, и решай нормальные задачки для чайника, типа вывести сумму двух чисел. И никогда больше не выкладывай код скринами, в следующий раз буду удалять. Есть для этого теги [php][/php] или кнопка
Нам это стоит понимать, почему у тебя в роутер заносится null ? Теперь задай вопрос самому компу, он тебе поможет ? Лишь посветит в глаза своими пикселями, от того как ты сформулируешь ход своих мыслей.
11010000100111001101000010110101110100011000000111010001100000101101000010111110001000001101000110000010110100001011111011010000101100111101000010111110001011000010000011010001100001111101000110000010110100001011111011010000101100011101000110001011001000001101000010111011110100001011100011010001100010001101000010111101110100001011100011010000101110010010000011010001100000001101000010110000110100001011011100100000110100001011111111010000101110001101000110000001110100001011000011010001100000101101000110001100001000001101000010111110001000001101000110000010110100001011001011010000101111101101000010110101110100001011110000100000110100011000001111010001100000001101000010111110110100001011001011010000101111011101000010110101001000001101000010111000110100001011110111010001100000101101000010110101110100001011101111010000101110111101000010110101110100001011101011010001100000101101000010110000001011000010000011010000101100101101000010110111110100011000111111010000101110110010000011010000101100011101000110001011001000001101000010111000001000001101000110000011110100001011011111010000101111011101000010110000110100001011101100100000001000101101000010111111110100001011111011010001100001111101000010110101110100001011110011010001100000110010000001101110011101010110110001101100001000100010111000100000110100001001001000100000110100001011101011010000101110111101000010110000110100011000000111010001100000011101000010110101001000000100010001001001001000000011000100110100001000001101000110000001110100011000001011010001100000001101000010111110110100001011101011010000101100000010110000100000110100001011111011010001100010001101000010111000110100001011000111010000101110101101000010110000001000001101000010110011110100011000000011010000101100001101000010111100110100001011110011010000101100001101000110000010110100001011100011010001100001111101000010110101110100011000000111010000101110101101000010110000110100011000111100101110
я тоже думал зачем 010 и т.д. Маус написал, но когда он мне обьяснил я ржал с этого, подсказка: скопируй этот код с нулями и единицами, переведи с бинарного кода на текстовый. Подсказка 2: яндекс и гугл в помощь. Подсказка 3 перевести этот текс онлайн переводчиком бинарных кодов и там уже вставляешь эти нули и единицы! И дальше поймешь что нужно тебе сделать, хотя врядли, в коде нужно будет подумать элементарная ошибка, о которой я тебе не могу сказать так как не я ее нашел, а маусзверь. Удачи!
Спасибо за подсказку пробую --- Добавлено --- вот что вышло Результат: Место того, чтобы лишний раз писать о твоем уровне интеллекта, взял бы и узнал "почему null". В классе DI 14 строка, ошибка грамматическая.
Нет, смотрю класс di 14 строку 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; } } ?> --- Добавлено --- Нашел ошибку грамотическую, в слове container, исправил, но все равно ошибка Код (Text): 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
вот ответь мне, пожалуйста что в 14 строке не так, я же сказал не могу указать так как не я нашел эту ошибку, просто прочитай строку 10 раз только читай 14 а не 15 и т.д. Внимательно!!!
Нашел ошибку грамотическую, Я нашел в слове container ошибку, еще какая то? --- Добавлено --- В чем еще может быть проблема?
ура ты начинаешь понимать, хотя возможно, да я сам новичек хотя учу php больше тебя, язык мне этот дается крайне тяжело, у меня логика подводит меня, это отступление. Как ты исправил 14 строку покажи, если исправил выкидывает ли тебе еще ошибки?
Исправленный код : PHP: <?php namespace engine\DI; class DI { /** * @var array */ private $container = []; /** * @param $key * @param $value * @return $this */ public function set($key, $value) { $this->container[$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; } } ?> ПОсле исправления выдает ошибку Код (Text): 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
а доллар куда дел перед conta..... Хотя как то страно через $this-> использовать доллар) покажи 24 строку