2012-01-27 20 views
20

En C#, he llegado a adoptar el siguiente método de inicialización cadenas vacías:¿Cuál es la forma correcta de inicializar cadenas vacías en PHP?

string account = string.empty; 

en lugar de

string account = ""; 

De acuerdo con mi mentor y otros desarrolladores de C# que he hablado, la primer método es la mejor práctica.

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

$account = ''; 

Gracias.

+3

Las cadenas no son objetos de primera clase en PHP, por lo que no hay realmente ninguna otra forma de inicializarlos en su código ... – rdlowrey

Respuesta

22

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; 

Usted podría conseguir 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.

+0

Qué tal: $ account = null; ? – kaspnord

+0

Sí, eso funcionará bien. Todo depende del contexto, es posible que desee ver si el valor es 'NULL' en lugar de' "" '(cadena vacía) más tarde (pero realmente no debería ser necesario). Su método es mucho más claro, puede decir que la var es una cadena de inmediato. Escribir débilmente puede ser tu amigo o enemigo. –

3

Aquí están algunas otras cosas a tener en cuenta 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 la inicialización de Vars les gusta esto. En su lugar, localizo, o verifico la existencia a lo largo del código, de lo contrario terminará manteniendo una lista de variables que pueden no reflejar el uso en todo el código después de la inicialización.

+0

Gracias, eso fue útil. Lamentablemente, no tengo suficientes representantes para votar su respuesta. – kaspnord

+0

No se preocupe, diviértase con PHP. –

5

En su mayor parte, esto es irrelevante. A diferencia de muchos idiomas, en PHP (por lo general) 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 los 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 salvedad es que seleccionar las funciones de verificación para el tipo de variable (como lo hace la comprobación estricta igualdad, ===). Por ejemplo, falla el siguiente:

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

Sin embargo, esta conveniencia tiene un costo elevado. A diferencia de los lenguajes estrictamente tipados (o, al menos, "más estrictamente"), no hay nada en el lenguaje central para ayudarlo a detectar errores comunes del programador. Por ejemplo, lo siguiente será felizmente ejecutar, pero probablemente no como se esperaba:

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

Si elige para inicializar todas las variables, hacerlo tal como lo hizo. Pero luego active los avisos de PHP (E_NOTICE) para obtener advertencias de tiempo de ejecución sobre variables sin inicializar. Si no lo haces, básicamente estás perdiendo el tiempo y presionando las teclas para inicializar tu propia variable.

0

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

Si se quiere evitar errores como $myEmpty = " " vs vs $myEmpty = " "$myEmpty = ""

A veces es difícil saber cuándo hay dos espacios o uno o ninguno por el ojo humano. Utilizando la función chr que está resuelto con seguridad.

Y para cuerdas realmente vacío (cero bytes), no hay otro camino que simplemente definir con (solo) entre comillas como $nothing = '';

Cuestiones relacionadas