За последние 24 часа нас посетили 20078 программистов и 1082 робота. Сейчас ищут 719 программистов ...

Нет ошибки несуществующего ключа массива

Тема в разделе "PHP для новичков", создана пользователем Вероломство, 12 июл 2022.

  1. Вероломство

    Вероломство Активный пользователь

    С нами с:
    19 июн 2017
    Сообщения:
    615
    Симпатии:
    24
    PHP:
    1. <?php
    2.  
    3. use core\Application;
    4.  
    5. return function (Application $application) {
    6.     $error = $application->getContainer()->get('settings')['error'];
    7.  
    8.     $application->errorHandler($error['display'], $error['log'], $error['class']);
    9. };
    массив, попадающий в контейнер:

    PHP:
    1. <?php
    2.  
    3. return [
    4.     'settings' => []
    5. ];
    Почему нет ошибки, что нет ключа - 'error'!!!???

    p.s. дело в том, что если массив имеет вид:

    Код (Text):
    1. <?php
    2.  
    3. return [];
    то я получаю ошибку, что не найден ключ - 'settings' :)
     
  2. ADSoft

    ADSoft Старожил

    С нами с:
    12 мар 2007
    Сообщения:
    3.817
    Симпатии:
    735
    Адрес:
    Татарстан
    "конь в сферическом вакууме"
    ...
    что покажет print_r($application->getContainer()->get('settings')[) ?
    как реализован этот метод ...итд
     
  3. Вероломство

    Вероломство Активный пользователь

    С нами с:
    19 июн 2017
    Сообщения:
    615
    Симпатии:
    24
    обычный геттер :)

    PHP:
    1. public function get($key)
    2.     {
    3.         if (array_key_exists($key, $this->result)) {
    4.             return $this->result[$key];
    5.         }
    6.  
    7.         if (!array_key_exists($key, $this->dependencies)) {
    8.  
    9.             if (class_exists($key)) {
    10.                 $reflectionClass = new ReflectionClass($key);
    11.                 $args = [];
    12.  
    13.                 if ($constructor = $reflectionClass->getConstructor()) {
    14.  
    15.                     foreach ($constructor->getParameters() as $parameter) {
    16.  
    17.                         if ($parameter->getType()->isBuiltin()) {
    18.  
    19.                             if (!$parameter->isDefaultValueAvailable()) {
    20.                                 throw new Exception("Не указано значение по умолчанию параметра: $parameter->name");
    21.                             }
    22.  
    23.                             $args[] = $parameter->getDefaultValue();
    24.                         } else {
    25.                             $args[] = $this->get($parameter->getType()->getName());
    26.                         }
    27.                     }
    28.                 }
    29.  
    30.                 return $this->result[$key] = $reflectionClass->newInstanceArgs($args);
    31.             }
    32.  
    33.             throw new Exception("Не найдена зависимость: $key");
    34.         }
    35.  
    36.         $dependency = $this->dependencies[$key];
    37.  
    38.         if ($dependency instanceof Closure) {
    39.             $this->result[$key] = $dependency($this);
    40.         } else {
    41.             $this->result[$key] = $dependency;
    42.         }
    43.  
    44.         return $this->result[$key];
    45.     }
    --- Добавлено ---
    Код (Text):
    1. Array ( )
    --- Добавлено ---
    @ADSoft

    PHP:
    1. print_r($application->getContainer()->get('settings')['error']); // не выводит - НИЧЕГО :)
    --- Добавлено ---
    @ADSoft если есть ключ error с массивом, то оттуда берутся значения естественно
     
  4. Вероломство

    Вероломство Активный пользователь

    С нами с:
    19 июн 2017
    Сообщения:
    615
    Симпатии:
    24
    @ADSoft НЕМНОГО разобрался: на отсутствие ключа settings вылетает цветная ошибка (xdebug), на отсутствующий ключ error цветная ошибка вылетает, если прописать error_reporting(-1), получается отсутствию ключа settings закон не писан и ошибка вылетает без error_reporting(-1)

    прикольно