¿Cuál es la forma correcta de inicializar cadenas vacías en PHP?

4 minutos de lectura

En C#, adopté el siguiente método para inicializar cadenas vacías:

string account = string.empty;

más bien que

string account = "";

Según mi mentor y otros desarrolladores de C# con los que he hablado, el primer método es la mejor práctica.

Dicho esto, ¿hay una mejor manera de inicializar cadenas vacías en PHP? Actualmente, veo lo siguiente ampliamente utilizado:

$account="";

Gracias.

  • Las cadenas no son objetos de primera clase en php, por lo que realmente no hay otra forma de inicializarlas en su código…

    – rdlowrey

    27 de enero de 2012 a las 17:20


avatar de usuario
Wesley Murch

Lo que estás haciendo es correcto. No hay mucho más que decir al respecto.

Ejemplo:

$account="";

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

echo  $account;

Podrías ponerte tonto y hacer algo como esto:

$str = (string) NULL;

..pero eso es completamente inútil, y es exactamente lo mismo: una cadena vacía.

Lo estás haciendo bien.

  • ¿Qué pasa con: $cuenta = nulo; ?

    – kaspnord

    27 de enero de 2012 a las 17:26

  • Sí, eso funcionará bien. Todo depende del contexto, es posible que desee ver si el valor es NULL en vez de "" (cadena vacía) más tarde (pero en realidad no debería necesitarlo). Su método es mucho más claro, puede decir que var es una cadena de inmediato. La escritura débil puede ser tu amiga o enemiga.

    –Wesley Murch

    27 de enero de 2012 a las 17:27


  • Estaba buscando algo hoy para mi resaltador de sintaxis, he usado comillas simples y dobles en el lado de javascript, y necesito generar una cadena vacía de PHP, algo así como {{ $var ? $var : "" }}pero el resaltador no me permite ver un código bonito, incluso si es completamente válido. null sería mejor en casos como este. Gracias por el aviso @WesleyMurch.

    – Taha Paksu

    30 oct 2020 a las 23:48

En su mayor parte, esto es irrelevante. A diferencia de muchos lenguajes, en PHP (generalmente) no importa si inicializa una variable. PHP emitirá automáticamente una variable no inicializada (o incluso no declarada) según corresponda para el uso inmediato. Por ejemplo, los siguientes son todos correctos:

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

La única advertencia es que las funciones de selección verifican el tipo de variable (al igual que la verificación de igualdad estricta, ===). Por ejemplo, lo siguiente falla:

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

Sin embargo, esta conveniencia tiene un alto costo. A diferencia de los lenguajes de tipo estricto (o, al menos, de tipo “más estricto”), no hay nada en el lenguaje central en sí que lo ayude a detectar errores comunes de programador. Por ejemplo, lo siguiente se ejecutará felizmente, pero probablemente no como se esperaba:

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

Si elige inicializar todas sus variables, hágalo tal como lo hizo. Pero luego habilite los avisos de PHP (E_NOTICE) para recibir advertencias en tiempo de ejecución sobre variables no inicializadas. Si no lo hace, básicamente está perdiendo el tiempo y las pulsaciones de teclas inicializando su propia variable.

Aquí hay algunas otras cosas a considerar cuando se trabaja con cadenas 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
} 

Normalmente trato de evitar inicializar vars como este. En su lugar, localizo o verifico la existencia en todo el código; de lo contrario, terminará manteniendo una lista de variables que en realidad pueden no reflejar el uso en todo el código después de la inicialización.

  • Gracias, eso fue útil. Desafortunadamente, no tengo suficientes representantes para votar tu respuesta.

    – kaspnord

    27 de enero de 2012 a las 17:33

  • No te preocupes, diviértete con PHP.

    –Mike Purcell

    27 de enero de 2012 a las 17:36

avatar de usuario
tartamudear

chr(32) representa el espacio ASCII (es decir, una cadena de 1 byte de longitud).

Si quieres evitar errores como $myEmpty = " " contra $myEmpty = " " contra $myEmpty = ""

A veces es difícil saber cuándo hay dos espacios, uno o ninguno a simple vista. Usando chr función que está resuelta con seguridad.

Y para una cadena realmente vacía (cero bytes), no hay otra forma más que simplemente definirla con comillas (simples) como $nothing = '';

¿Ha sido útil esta solución?