Я пытаюсь понять важность инициализации переменной, прежде чем присваивать ей значение в тех редких случаях, когда, например, вы можете создавать массив в цикле.
Например;
foreach($var1 as $key => $val) {
$array[] = $key;
}
В этом примере $array
не был объявлен до того, как использовался для хранения массива, что, как мне сказали, является плохой практикой, но я понятия не имею, почему. Вместо этого мне посоветовали сделать это;
$array = array();
foreach($var1 as $key => $val) {
$array[] = $key;
}
Другой пример при построении длинной строки на основе множества значений массива:
$size = count($array);
for($i = 0; $i < $size; $i++) {
$string .= $array[$i]."del".$array_2[$i].",";
}
Мне сказали, что это должно быть сделано так
$string = null;
$size = count($array);
for($i = 0; $i < $size; $i++) {
$string .= $array[$i]."del".$array_2[$i].",";
}
Мне интересно, почему в обоих этих случаях рекомендуется инициализировать переменную перед присвоением ей данных? Или это не тот случай, и я просто услышал неправильно. Существуют ли исключения из этого правила, если оно существует?
Обновление: Это был бы правильный способ инициализации переменных в этой функции?
function weight_index($keyword, $src, $alt, $content, $ratio='3:3:1') {
// Initialize needed variables
$content_index = ''; $src_index = ''; $alt_index = '';
// Create all four types of $keyword variations: -, _, %20, in order to search
// through $content, $alt, $src for instances.
$keyword_fmt = array('hyphen' => str_replace(' ', '-', $keyword), 'underscore' => str_replace(' ', '_', $keyword), 'encode' => urlencode($keyword), 'original' => $keyword);
// Define weight index for each instance within a searchable "haystack".
list($src_weight, $alt_weight, $content_weight) = explode(':', $ratio);
// Get the number of instances of $keyword in each haystack for all variations.
foreach($keyword_fmt as $key => $value) {
$content_index += substr_count($value, $content); // .. may generate an error as $x_index hasn't been initialized.
$src_index += substr_count($value, $src);
$alt_index += substr_count($value, $alt);
}
// Multiply each instance by the correct ratio.
$content_index = $content_index * $content_weight;
$src_index = $src_index * $src_weight;
$alt_index = $alt_index * $alt_weight;
// Total up all instances, giving a final $weight_index.
$weight_index = $content_index + $src_index + $alt_index;
return $weight_index;
}
Или было бы разумнее использовать ключевое слово global
перед такими переменными, как $content_index
, $src_index
и $alt_index
, и инициализировать их в отдельном файле, который будет включен, например, init_variables.php
, который будет содержать все переменные, которые должны быть инициализированы перед использованием, как в примерах в этом посте?