web-dev-qa-db-fra.com

Quelle est la bonne façon d'initialiser des chaînes vides en PHP?

En C #, j'ai fini par adopter la méthode suivante pour initialiser les chaînes vides:

string account = string.empty;

plutôt que

string account = "";

Selon mon mentor et d'autres développeurs C # auxquels j'ai parlé, la première méthode est la meilleure pratique.

Cela dit, existe-t-il un meilleur moyen d'initialiser des chaînes vides en PHP? Actuellement, je vois ce qui suit largement utilisé:

$account = '';

Merci.

20
kaspnord

Ce que tu fais est correct. Pas beaucoup plus à dire à ce sujet.

Exemple:

$account = '';

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

echo  $account;

Vous pourriez devenir idiot et faire quelque chose comme ça:

$str = (string) NULL;

..mais c'est totalement inutile, et c'est exactement la même chose - une chaîne vide.

Tu le fais bien.

24
Wesley Murch

Pour la plupart, ce n'est pas pertinent. Contrairement à beaucoup de langues, dans PHP, peu importe (généralement) d'initialiser une variable. PHP convertira automatiquement une variable non initialisée (ou même non déclarée) appropriée pour une utilisation immédiate. Par exemple, les éléments suivants sont tous corrects:

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

L'avertissement est que les fonctions de sélection vérifient le type de variable (comme le contrôle d'égalité stricte, ===). Par exemple, les éléments suivants échouent:

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

Cette commodité a toutefois un coût élevé. Contrairement aux langues strictement typées (ou au moins, "plus strictement"), rien dans la langue principale ne vous aide à détecter les erreurs courantes des programmeurs. Par exemple, ce qui suit s’exécutera avec plaisir, mais probablement pas comme prévu:

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

Si vous choisissez d'initialiser toutes vos variables, faites-le comme vous l'avez fait. Mais ensuite, activez les notifications PHP (E_NOTICE) pour obtenir des avertissements au moment de l’exécution concernant les variables non initialisées. Sinon, vous perdez du temps et des frappes au clavier en initialisant votre propre variable.

5
Conrad Shultz

Voici quelques autres éléments à prendre en compte lorsque vous travaillez avec des chaînes en 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
} 

Normalement, j'essaie d'éviter d'initialiser des variables comme celle-ci. Au lieu de cela, je localise ou vérifie l'existence dans tout le code, sinon vous devez conserver une liste exhaustive de variables qui peuvent ne pas refléter réellement l'utilisation dans le code après l'initialisation. 

3
Mike Purcell

chr(32) représente ASCII espace (c'est-à-dire une chaîne d'une longueur de 1 octet). 

Si vous voulez éviter des erreurs comme $myEmpty = " " vs $myEmpty = " " vs $myEmpty = "" 

Parfois, il est difficile de dire quand il y a deux espaces ou un ou aucun à l'œil humain. Utiliser la fonction chr qui est résolue à coup sûr. 

Et pour une chaîne vraiment vide (zéro octet), il n'y a pas d'autre moyen que de simplement la définir avec des guillemets (simples) comme $nothing = '';

0
stamster