Функция с выводом пользовательского шаблона [дубликат]

Это означает, что указанная переменная не указана ни на что. Я мог бы сгенерировать это так:

SqlConnection connection = null;
connection.Open();

Это вызовет ошибку, потому что, пока я объявил переменную «connection», она не указала ни на что. Когда я пытаюсь вызвать член «Open», для его устранения нет ссылки, и он будет вызывать ошибку.

Чтобы избежать этой ошибки:

  1. Всегда инициализируйте свои объекты, прежде чем пытаться что-либо с ними делать.
  2. Если вы не уверены, что объект имеет значение null, проверьте его с помощью object == null.

Инструмент Resharper JetBrains определит каждое место в вашем коде, которое имеет возможность ошибки нулевой ссылки, позволяя вам ввести нулевую проверку. Эта ошибка является источником ошибок номер один, IMHO.

68
задан andrewtweber 18 November 2011 в 05:13
поделиться

4 ответа

Первое отличие:

Интересный пример другого поведения между 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);
?>
  • Я бы ожидал в результате: «ZDDB»
  • Однако это возвращение: «ZDDD» (потому что B = D в соответствии с нашим массивом)

Чтобы сделать эту работу , вместо этого используйте «strtr»:

<?php
$arr = array("1" => "A","2" => "B","3" => "C","B" => "D");
$word = "ZBB2";
echo strtr($word,$arr);
?>
  • Это возвращает: «ZDDB»

Это означает, что 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»


Основное объяснение:

Это происходит потому, что:

  • strtr: сортирует свои параметры по длине, в порядке убывания , так: это даст «большее значение» самому большому, и тогда, поскольку текст темы сам по себе является самым большим ключом заменяющего массива, он переводится. потому что все символы текста темы были заменены, процесс заканчивается там.
  • str_replace: он работает в том порядке, в котором определены ключи, поэтому: он находит ключ «PHP» в тексте темы и заменяет его: «PHP: Hypertext Preprocessor», что дает результат: PHP: препроцессор гипертекста: препроцессор гипертекста ". то он находит следующий ключ: «PHP: Hypertext Preprocessor» в результирующем тексте предыдущего шага, поэтому его заменяет «PHP», что дает результат: «PHP: Hypertext Preprocessor». больше нет ключей для поиска, поэтому замена заканчивается там.
108
ответ дан zainengineer 26 August 2018 в 00:41
поделиться

Кажется, что достичь одинаковых результатов можно с помощью любой функции

. Это не всегда верно и зависит от поиска и замены данных, которые вы предоставляете. Например, где две функции различаются, см. . Есть ли в PHP str_replace предел более 13 символов?

  • strtr не заменит в некоторых частях строки, которые уже были заменены - str_replace заменит внутренние замены.
  • strtr начнется с самой длинной клавиши сначала, если вы вызовете ее с двумя параметры - str_replace будут заменяться слева направо.
  • str_replace может вернуть количество выполненных замен - strtr не предлагает такого значения счета.
16
ответ дан Community 26 August 2018 в 00:41
поделиться

Я думаю, что strtr обеспечивает более гибкую и условную замену при использовании с двумя аргументами, например: если строка равна 1, замените на a, но если строка равна 10, замените на b. Этот трюк может быть достигнут только strtr.

$string = "1.10.0001";  
echo strtr($string, array("1" => "a", "10" => "b"));  
// a.b.000a  

см.: Php Manual Strtr .

4
ответ дан Ioannis Karadimas 26 August 2018 в 00:41
поделиться

Обратите внимание на инструкцию STRTR-- Описание string strtr (string $ str, string $ from, string $ to) string strtr (string $ str, array $ replace_pairs) Если заданы три аргумента, эта функция возвращает копию str где. ..

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

STRTR каждый поворот НЕ действует для следующего, НО STR_REPLACE делает.

1
ответ дан Null None 26 August 2018 в 00:41
поделиться
Другие вопросы по тегам:

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