Подтвердить что ты не робот

Каков правильный способ инициализации пустых строк в PHP?

В С# я пришел, чтобы принять следующий метод инициализации пустых строк:

string account = string.empty;

а не

string account = "";

По словам моего наставника и других разработчиков С#, о которых я говорил, первый метод - лучшая практика.

Тем не менее, есть ли лучший способ инициализировать пустые строки в PHP? В настоящее время я вижу следующее широко используемое:

$account = '';

Спасибо.

4b9b3361

Ответ 1

То, что вы делаете, правильно. Не так много сказать об этом.

Пример:

$account = '';

if ($condition)  $account .= 'Some text';

echo  $account;

Вы можете стать глупым и сделать что-то вроде этого:

$str = (string) NULL;

.. но это совершенно бессмысленно, и это точно то же самое - пустая строка.

Вы делаете это правильно.

Ответ 2

По большей части это не имеет значения. В отличие от многих языков, в PHP он (обычно) не имеет значения, инициализируйте ли вы переменную. PHP автоматически выдаст неинициализированную (или даже необъявленную) переменную, подходящую для немедленного использования. Например, все верно:

$a;
$a + 7; // Evaluates to 7
$a . "This is a test."; // Evaluates to "This is a test."
if (! $a) {}  // Evaluates as true

Единственное предостережение в том, что функции select проверяют тип переменной (как и строгая проверка равенства, ===). Например, выполняется следующее:

$a;
if (is_string($a)) {
    print 'success';
}
else {
    print 'fail';
}

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

$isLoggedIn = getLoginStatus($user);
if ($isLogedIn) {
    // Will never run
    showOrder($user);
}
else {
    showLoginForm();
}

Если вы решите инициализировать все свои переменные, сделайте это так же, как и вы. Но затем включите уведомления PHP (E_NOTICE), чтобы получить предупреждения во время выполнения о неинициализированных переменных. Если вы этого не сделаете, вы в основном теряете время и клавиши, инициализируя свою собственную переменную.

Ответ 3

Вот некоторые другие вещи, которые следует учитывать при работе со строками в PHP:

// Localize based of possible existence
$account = (array_key_exists('account', $results)) ? $results['account'] : null;

// Check to see if string was actually initialized
return (isset($account)) ? $account : null

// If a function is passed an arg which is REQUIRED then validate it
if (empty($arg1)) {
    throw new Exception('Invalid $arg1');
}

echo $arg;

// If you are looking to append to string, then initialize it as you described
$account = null;

if (!empty($firstName)) {
    $account .= $firstName;
}

echo $account;

// Also, it better to initialize as null, so you an do simple check constructs
if (is_null($account)) {
    // Do something
}

// Versus these types of checks
if ($account == '') {
    // Do something
} 

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

Ответ 4

chr(32) представляет собой пространство ASCII (т.е. строку длиной в 1 байт).

Если вы хотите избежать ошибок, таких как $myEmpty = " " vs. $myEmpty = " " vs. $myEmpty = ""

Иногда трудно сказать, когда в человеческих глазах есть два пробела или один или один. Использование функции chr, которая будет решена точно.

И для действительно пустой строки (нулевые байты) нет другого способа, кроме как просто определить ее с помощью (одиночных) кавычек, таких как $nothing = '';