Как правильно инициализировать пустые строки в PHP? - PullRequest
21 голосов
/ 27 января 2012

В C # я принял следующий метод инициализации пустых строк:

string account = string.empty;

вместо

string account = "";

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

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

$account = '';

Спасибо.

Ответы [ 4 ]

28 голосов
/ 27 января 2012

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

Пример:

$account = '';

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

echo  $account;

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

$str = (string) NULL;

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

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

5 голосов
/ 27 января 2012

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

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

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

$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 голосов
/ 27 января 2012

Вот некоторые другие вещи, которые следует учитывать при работе со строками в 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's 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
} 

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

0 голосов
/ 24 октября 2017

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

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

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

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

...