soporta - Usa llaves para estructurar código en PHP
title html español (4)
¿Es posible encerrar fragmentos de código en PHP entre paréntesis (sin usar el fragmento como una función)?
¿Se comportaría el siguiente código de la misma manera que lo haría sin los corchetes? ¿O podría haber algún problema dependiendo de qué tipo de código se usa dentro o fuera de los soportes?
Por ejemplo, esto será:
<?php
// First Code-Block
{# several lines of code
}
// Second Code-Block
{# another several lines of code
}
?>
Siempre se comporta de la misma manera que esto:
<?php
// First Code-Block
# several lines of code
// Second Code-Block
# another several lines of code
?>
El comportamiento del código PHP no cambia si lo encierras entre paréntesis. Sin embargo, no puedes usar algunas declaraciones de PHP entre paréntesis:
- declaraciones de
namespace
; - el espacio de nombres
use
declaraciones al alias o importa cualquier nombre; -
const
globalesconst
; -
__halt_compiler()
.
Esto significa que el siguiente script funcionará:
<?php
const x = 5;
echo x;
pero lo siguiente no compilará:
<?php
{
const x = 5;
echo x;
}
En un proyecto en el que estoy trabajando, uso grupos de instrucciones para indicar la estructura; en mi caso, las relaciones padre / hijo entre nodos se crean en un enrutador:
$router = new Router();
$admin = $router->route(''admin'');
{
$upload = $admin->route(''upload'')->post(''upload'');
$menu = $admin->route(''menu'');
{
$menu->route(''load'')->get(''load'');
$menu->route(''save'')->get(''save'');
}
}
`` `
Internamente, esto construye una estructura jerárquica como:
/admin
/upload
/menu
/load
/save
La route()
llamada route()
en este ejemplo crea un elemento secundario, por lo que el código crea un modelo (dentro del enrutador) que tiene una estructura de árbol, pero la estructura del código no lo refleja.
Aquí utilizo llaves para hacer que el código sea más legible, ya que leer el código sin llaves y sangría sería bastante difícil:
$router = new Router();
$admin = $router->route(''admin'');
$upload = $admin->route(''upload'')->post(''upload'');
$menu = $admin->route(''menu'');
$menu->route(''load'')->get(''load'');
$menu->route(''save'')->get(''save'');
La sangría en este caso realmente aclara lo que está sucediendo, creo.
Sí, pero no creará un nuevo ámbito local. No es algo que normalmente se haría. Normalmente las personas marcan bloques como este con comentarios.
Actualizar:
Tomó un poco de excavación para encontrar una referencia a él en el manual, pero aquí está:
http://www.php.net/manual/en/control-structures.intro.php
Cualquier script PHP está construido a partir de una serie de declaraciones. Una declaración puede ser una asignación, una llamada de función, un bucle, una declaración condicional o incluso una declaración que no hace nada (una declaración vacía). Las declaraciones usualmente terminan con un punto y coma. Además, las declaraciones se pueden agrupar en un grupo de instrucciones mediante la encapsulación de un grupo de declaraciones con llaves. Un grupo de declaración es una declaración por sí misma también. Los distintos tipos de declaraciones se describen en este capítulo.
La clave aquí es que las declaraciones se pueden agrupar en un grupo de declaraciones al encapsular un grupo de declaraciones con llaves .
También busqué una referencia al alcance variable en relación con esta situación, pero el manual no lo menciona específicamente, sin embargo, puedes considerarlo así:
En PHP, las funciones y clases crean un ámbito variable. Puedes leer sobre eso aquí . Pero un grupo de declaración (como se describe anteriormente) no lo hace. No piense en las llaves de un grupo de instrucciones como en la función (o clase) que encierran los paréntesis, sino que piense en ellas como las llaves que encierran el grupo de instrucciones de las estructuras de control ( if
, for
, while
, switch
, etc. .) - porque eso es exactamente lo que son. Está claro que si está utilizando una sentencia if
(o cualquier otra estructura de control) que las llaves no introducen un nuevo ámbito, simplemente son envoltorios para un bloque de sentencias.
También hago esto, únicamente por mi editor de texto (Komodo Edit 8.5). No es una "mala razón" o una "mala codificación", si te ayuda y no causa ningún problema y si no hay otra forma fácil de hacerlo.
Resuelvo el problema con una solución alternativa:
if(1 == 1){ //always executing if function
//whatever you want to add
}
#
agregar un # al final evita que mi editor colapse todas las líneas vacías debajo de los corchetes. Esto ayuda a estructurar aún más el código.