Получение лучших практик значения словаря

Предупреждение: [fункция] : не удалось открыть поток: [причина]

Это происходит, когда вы обычно вызываете файл include , require или fopen, и PHP не смог найти файл или не имел достаточного разрешения на загрузку файла.

Это может произойти по разным причинам:

  • неправильный путь к файлу
  • путь к файлу относительный
  • include path is wrong
  • разрешения слишком ограничительные
  • SELinux в силе
  • и многие другие ...

Одна из распространенных ошибок заключается в том, чтобы не использовать абсолютный путь. Это можно легко решить, используя полный путь или магические константы , такие как __DIR__ или dirname(__FILE__):

include __DIR__ . '/inc/globals.inc.php';

или:

require dirname(__FILE__) . '/inc/globals.inc.php';

Обеспечение правильного пути используется одним шагом в устранении этих проблем, это также может быть связано с несуществующими файлами, правами файловой системы, предотвращающими доступ или открытыми ограничениями на основе самого PHP.

Лучший способ для быстрого решения этой проблемы необходимо выполнить контрольный список устранения неполадок ниже.

Вопросы, относящиеся:

Связанные ошибки:

79
задан wonea 19 February 2019 в 16:35
поделиться

3 ответа

TryGetValue немного быстрее, потому что FindEntry только назовут однажды.

, Сколько быстрее? Это зависит от набора данных под рукой. То, когда Вы звоните, Содержит метод, Словарь делает внутренний поиск для нахождения его индекса. Если это возвращает true, Вам нужен другой поиск по индексу для получения фактического значения. При использовании TryGetValue он ищет только однажды индекс и, если найдено, он присваивает значение переменной.

к вашему сведению: это на самом деле не фиксирует ошибку.

Это звонит:

public bool TryGetValue(TKey key, out TValue value)
{
    int index = this.FindEntry(key);
    if (index >= 0)
    {
        value = this.entries[index].value;
        return true;
    }
    value = default(TValue);
    return false;
}

ContainsKey - это:

public bool ContainsKey(TKey key)
{
    return (this.FindEntry(key) >= 0);
}
84
ответ дан Micah 24 November 2019 в 10:18
поделиться

Хорошо на самом деле TryGetValue быстрее. Насколько быстрее? Это зависит от набора данных под рукой. То, когда Вы звоните, Содержит метод, Словарь делает внутренний поиск для нахождения его индекса. Если это возвращает true, Вам нужен другой поиск по индексу для получения фактического значения. При использовании TryGetValue он ищет только однажды индекс и, если найдено, он присваивает значение переменной.

Редактирование:

хорошо, я понимаю Ваш беспорядок, таким образом позвольте мне уточнить:

Случай 1:

if (myDict.Contains(someKey))
     someVal = myDict[someKey];

В этом случае существует 2 вызова к FindEntry, один, чтобы проверить, существует ли ключ и один для получения его

Случай 2:

myDict.TryGetValue(somekey, out someVal)

В этом случае существует только один вызов к FindKey, потому что получающийся индекс сохранен для фактического извлечения в том же методе.

29
ответ дан Diadistis 24 November 2019 в 10:18
поделиться

Я предполагаю, что trygetvalue делает что-то больше как:

if(myDict.ReallyOptimisedVersionofContains(someKey))
{ 
  someVal = myDict[someKey];
  return true;
}
return false;

Так, надо надеяться, никакая попытка/выгода где угодно.

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

1
ответ дан Jennifer 24 November 2019 в 10:18
поделиться
Другие вопросы по тегам:

Похожие вопросы: