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.
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
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 = '';
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