Это означает, что указанная переменная не указана ни на что. Я мог бы сгенерировать это так:
SqlConnection connection = null;
connection.Open();
Это вызовет ошибку, потому что, пока я объявил переменную «connection
», она не указала ни на что. Когда я пытаюсь вызвать член «Open
», для его устранения нет ссылки, и он будет вызывать ошибку.
Чтобы избежать этой ошибки:
object == null
. Инструмент Resharper JetBrains определит каждое место в вашем коде, которое имеет возможность ошибки нулевой ссылки, позволяя вам ввести нулевую проверку. Эта ошибка является источником ошибок номер один, IMHO.
Первое отличие:
Интересный пример другого поведения между strtr
и str_replace
приведен в разделе комментариев руководства PHP:
<?php
$arrFrom = array("1","2","3","B");
$arrTo = array("A","B","C","D");
$word = "ZBB2";
echo str_replace($arrFrom, $arrTo, $word);
?>
Чтобы сделать эту работу , вместо этого используйте «strtr»:
<?php
$arr = array("1" => "A","2" => "B","3" => "C","B" => "D");
$word = "ZBB2";
echo strtr($word,$arr);
?>
Это означает, что str_replace
является более глобальным подходом к заменам , а strtr
просто переводит символы один за другим.
Другое отличие:
Учитывая следующий код (взятый из Сравнение скорости замены строк PHP ):
<?php
$text = "PHP: Hypertext Preprocessor";
$text_strtr = strtr($text
, array("PHP" => "PHP: Hypertext Preprocessor"
, "PHP: Hypertext Preprocessor" => "PHP"));
$text_str_replace = str_replace(array("PHP", "PHP: Hypertext Preprocessor")
, array("PHP: Hypertext Preprocessor", "PHP")
, $text);
var_dump($text_strtr);
var_dump($text_str_replace);
?>
Результирующие строки текста будут:
string (3) Строка «PHP» (27) «PHP: Hypertext Preprocessor»
blockquote>
Основное объяснение:
Это происходит потому, что:
- strtr: сортирует свои параметры по длине, в порядке убывания , так: это даст «большее значение» самому большому, и тогда, поскольку текст темы сам по себе является самым большим ключом заменяющего массива, он переводится. потому что все символы текста темы были заменены, процесс заканчивается там.
- str_replace: он работает в том порядке, в котором определены ключи, поэтому: он находит ключ «PHP» в тексте темы и заменяет его: «PHP: Hypertext Preprocessor», что дает результат: PHP: препроцессор гипертекста: препроцессор гипертекста ". то он находит следующий ключ: «PHP: Hypertext Preprocessor» в результирующем тексте предыдущего шага, поэтому его заменяет «PHP», что дает результат: «PHP: Hypertext Preprocessor». больше нет ключей для поиска, поэтому замена заканчивается там.
Кажется, что достичь одинаковых результатов можно с помощью любой функции
blockquote>. Это не всегда верно и зависит от поиска и замены данных, которые вы предоставляете. Например, где две функции различаются, см. . Есть ли в PHP str_replace предел более 13 символов?
strtr
не заменит в некоторых частях строки, которые уже были заменены -str_replace
заменит внутренние замены.strtr
начнется с самой длинной клавиши сначала, если вы вызовете ее с двумя параметры -str_replace
будут заменяться слева направо.str_replace
может вернуть количество выполненных замен -strtr
не предлагает такого значения счета.
Я думаю, что strtr
обеспечивает более гибкую и условную замену при использовании с двумя аргументами, например: если строка равна 1, замените на a, но если строка равна 10, замените на b. Этот трюк может быть достигнут только strtr
.
$string = "1.10.0001";
echo strtr($string, array("1" => "a", "10" => "b"));
// a.b.000a
см.: Php Manual Strtr .
Обратите внимание на инструкцию STRTR-- Описание string strtr (string $ str, string $ from, string $ to) string strtr (string $ str, array $ replace_pairs) Если заданы три аргумента, эта функция возвращает копию str где. ..
STR_REPLACE-- ... Если поиск или замена являются массивами, их элементы обрабатываются в первую очередь. ...
STRTR каждый поворот НЕ действует для следующего, НО STR_REPLACE делает.