Copyright© 2018 GoDaddy Iberia
Código Bonito con PHP
Poesía para tus ojos con estándares simples
Mauricio Gelves - @maugelves
Copyright© 2018 GoDaddy Iberia
PHP un código muy benévolo
3
<?php
/*
Sólo dios y yo sabemos porqué está hecho así,
y si estás leyendo esto, probablemente yo ya no trabaje aquí.
Suerte
*/
$redsys = new SermepaTpvTpv();
if ($amount > 0) { // Si tenemos un importe... todo OK
$redsys->setAmount($amount);} else
{ // sino tenemos un importe... nos lo inventamos y enviamos
todo al entorno de pruebas.
$redsys->setAmount(rand(10,600));
$entorno = "test";
$btnValue .= "- AMOUNT 0 - SETENV TEST";}
<?php
// Tela marinera
// Mariner fabric
<?php
// Y es que cada programador es de su padre y de su madre
$variable = "Esto es un texto";
$variable = 'Esto es un texto';
if ($variable==="Esto es un texto")
{
return true;
}
if ( $variable === "Esto es un texto" )
{
return true;
}
if ( $variable === "Esto es un texto" ) {
return true;
}
if ( $variable === "Esto es un texto" ) return true;
if ( "Esto es un texto” === $variable ) return true;
Copyright© 2018 GoDaddy Iberia
¿A quién va dirigida esta charla?
7
$cita = "Las prisas pasan, las 💩 quedan.";
$autor = "Pablo López | @desarrollowp”;
Copyright© 2018 GoDaddy Iberia
Comillas dobles y simples
9
<?php
// COMILLAS DOBLES O SIMPLES
// Opción 01
$variable = "Hello World";
// Opción 02
$variable = 'Hello World';✅
⚠
<?php
// COMILLAS DOBLES O SIMPLES
// Opción 03
if ( $variable == "Hello World" ) return true;
// Opción 04
if ( $variable == 'Hello World' ) return true;
✅
⚠
Copyright© 2018 GoDaddy Iberia
Comillas dobles y simples
12
El estándar
<?php
// COMILLAS DOBLES O SIMPLES
// Solo cuando comparamos strings usamos comillas dobles
if ( $variable == "Hello World" ) return true;
// Para el resto de los casos utilizamos comillas simples
$variable = 'Hello World';
// Inclusive para evitar escapar caracteres
$html = '<a href="http://wordpress.org">WordPress</a>';
Copyright© 2018 GoDaddy Iberia
Identación y espacios
14
Uno de los más importantes
<?php
// What the…
function foo($arguments){
if (0<count($arguments){
foreach ($arguments as $arg => $value) {
echo $value;
}
}
}
<?php
// Hombreeee
function foo( $arguments ) {
if ( 0 < count( $arguments ) {
foreach ( $arguments as $arg => $value ) {
echo $value;
}
}
}
Copyright© 2018 GoDaddy Iberia
Identación
17
El estándar
<?php
/*
=== Indentación
- La Indentación debe siempre reflejar una estructura
lógica.
- Clases, funciones, condicionales, bucles tendrán que ser
identados.
- Para identar se usan TABS (no espacios). Esto permitirá
una mayor flexibilidad entre distintos IDE's.
*/
function foo( $arguments ) {
if ( 0 < count( $arguments ) {
foreach ( $arguments as $arg => $value ) {
echo $value;
}
}
}
Sublime Package: Trailing Spaces
Copyright© 2018 GoDaddy Iberia
Espacios
20
El estándar
<?php
/*
=== Espacios
- A cada lado de operadores de comparación (<, >, ==, ===,
etc),
- operadores lógicos (||, &&, y !) y
- operadores de asignación (=)
*/
if ( $x == 23 ){}
if ( $foo && $bar ){}
if ( ! $foo ){}
array( 1, 2, 3 )
$baz . '-5'
$term .= 'X'
<?php
/*
=== Espacios
- A cada lado de los paréntesis de los bloques if,
elseif, foreach, for, y switch
*/
if ( $valor == 100 ) {
accion();
}
elseif ( $variable == "Hola Mundo" ) {
accion2();
}
foreach ( $foo as $bar ) {
accion3();
}
<?php
/*
=== Espacios
- Cuando definimos una función con parámetros
*/
function ejecutar_accion( $parametro1 = 'foo', $parametro2 = 'var' ) {}
function ejecutar_otra_accion() {}
<?php
/*
=== Espacios
- Cuando llamamos funciones con parámetros
*/
ejecutar_accion( $parametro1, $parametro2 );
ejecutar_otra_accion();
<?php
/*
=== Espacios
- En bloques Switch no se deben dejar espacios
luego de los distintos "cases"
*/
switch ( $foo ) {
case 'hello': // correcto
break;
case 'world' : // incorrecto
break;
}
Copyright© 2018 GoDaddy Iberia
Llaves
26
Ay ay, aquí va a caer fuego…
<?php
// Opción 1 - Línea simple
if ( condicion )
ejecutar_funcion();
✅
<?php
// Opción 2 - Línea simple con else
if ( condicion )
ejecutar_funcion();
else
ejecutar_otra_funcion();
✅
<?php
// Condicionales multilíneas
if ( condicion ) {
ejecutar_funcion();
ejecutar_otra_funcion();
} else {
no_ejecutes_nada();
quieto_quedate();
}
✅
Copyright© 2018 GoDaddy Iberia
Llaves eternas
30
Keep it simple
<?php
if ( condicion ) {
// Un FOREACH con una funcionalidad específica
foreach( usuario en la base de datos ) {
if( El año de la fecha de alta es menor a 2010 ) {
borrar_usuario( usuario->ID );
log->escribir( 'Se borró el usuario ' . $usuario->ID );
enviar_email( 'admin@web.com', 'Se borró el usuario ' .
$usuario->ID );
enviar_email( $usuario->email, 'Cuenta eliminada.' );
}
}
}
// Un condicional UN POCO EXTENSO, ¿No?
<?php
if ( condition )
borrar_usuarios_anteriores_al_anio( año actual - 5 años );
/**
* Borra todos los usuarios con año de alta menor al parámetro
especificado
* @param int $anio - Año de alta de usuario
*/
function borrar_usuarios_anteriores_al_anio( $anio ) {
foreach( usuario en la base de datos ) {
if( El año de la fecha de alta es menor a $anio ) {
borrar_usuario( usuario->ID );
log->escribir( 'Se borró el usuario ' . $user->ID );
enviar_email( 'admin@web.com', 'Se borró el usuario ' .
$user->ID );
enviar_email( $user->email, 'Chau, ya no existes.' );
}
}
}
Copyright© 2018 GoDaddy Iberia
Etiquetas PHP
33
¿Abro y Cierro? ¿Abro solamente? ¿Shorthands?
<!-- Opción 1 - Shorthand -->
<button class="btn__green"><?= $texto_boton; ?></button>
<!-- Opción 2 - PHP Clásico -->
<button class="btn__green"><?php echo $texto_boton; ?></button>
✅
❌
Copyright© 2018 GoDaddy Iberia
Una y solo una directriz
35
<?php
/*
* _ _
* |  | |
* | | |_ _ _ __ ___ __ _ _ _ ___ ___ ___
* | . ` | | | | '_  / __/ _` | | | | / __|/ _ / __|
* | | | |_| | | | | (_| (_| | | |_| __  __/__ 
* |_| _|__,_|_| |_|_____,_| __,_|___/___||___/
* _ _ _ _ _ _____ _ _ _____
* | | | | | | | | | | | __ | | | | __ 
* ___| |__ ___ _ __| |_| |__ __ _ _ __ __| |___ __| | ___ | |__) | |__| | |__) |
* / __| '_  / _ | '__| __| '_  / _` | '_  / _` / __| / _` |/ _  | ___/| __ | ___/
* __  | | | (_) | | | |_| | | | (_| | | | | (_| __  | (_| | __/ | | | | | | |
* |___/_| |_|___/|_| __|_| |_|__,_|_| |_|__,_|___/ __,_|___| |_| |_| |_|_|
*
*/
/*
* _ _ _
* |  | | | |
* | | |_ _ _ __ ___ __ _| |
* | . ` | | | | '_  / __/ _` | |
* | | | |_| | | | | (_| (_| |_|
* |_| _|__,_|_| |_|_____,_(_)
*/
Copyright© 2018 GoDaddy Iberia
Etiquetas PHP
37
Buenas prácticas no documentadas
<!-- Si usamos PHP en el HTML abrimos y cerramos etiquetas —>
<button class="btn__green"><?php echo $texto_boton; ?></button>
<p>Soy un párrafo</p>
<a href="https://google.es">Enlace a Google</a>
front-page.php
<?php
/*
* En la funcionalidad puramente de PHP no hace falta cerrar la
etiqueta
* SI Y SOLO SI el fichero comienza con "<?php" pero…
*/
function mostrar_boton() {
echo '<button class="btn__green">' . $texto_boton . '</button>';
}
mi-plugin.php
Backend
Frontend
<?php
// Tela marinera
// Mariner fabric
<?php
/*
* Etiquetas PHP
* - Abrir y cerrar en Frontend
* - Evitar cerrar etiqueta PHP si el fichero comienza con "<?php"
*/
?> No, eso no se hace.
Copyright© 2018 GoDaddy Iberia
Convenciones para nomenclaturas
44
Camel, guiones bajos y otras yerbas…
<?php
/*
* No abrevies los nombres innecesariamente.
* Deja que tu código se explique por sí mismo.
*/
/*
* Clases => Sustantivos
* Funciones o métodos => Verbos
* Variables, parámetros o atributos => lo +
claro posible
*/
<?php
/*
* Clases:
* - Usa palabras con la primer letra mayúscula y
* separados por guión bajo.
* - En caso de sigla, todo en mayúscula
*/
// Mayúsculas
class Alumnos {}
// Mayúsculas con guiones bajo
class Gestor_De_Transacciones {}
// Mayúsculas, guiones bajo y siglas
class Traductor_API_REST {}
// Mayúsculas, guiones bajo y siglas
class Conversor_SQL {}
<?php
/*
* Funciones o Métodos:
*- Utiliza verbos fáciles de entender, NUNCA camelCase
*- Usa nombres de parámetros que completen la acción
*- Parametros string en lugar de booleanos
*/
function abrir_fichero( $nombre_fichero ) {
// Implementación de la función
}
function borrar_fichero( $nombre_fichero, $borrarlo_lentamente = true ) {
if( $borrarlo_lentamente ) {}
}
function borrar_fichero( $nombre_fichero, $velocidad = 'lentamente' ) {
if( $velocidad === "lentamente" ) {}
}
// Utilización del método
abrir_fichero( 'readme.txt' );
borrar_fichero( 'readme.txt', true );
borrar_fichero( 'readme.txt', 'lentamente' );
<?php
/*
* Variables:
*- Siempre minúsculas (NUNCA camelCase)
*- Múltiples palabras separadas por guión bajo
*/
// Definición de variables
$variable = 'Hello World';
$nombre_de_fichero = 'readme.txt';
<?php
/*
* Ficheros:
*- Siempre minúsculas (NUNCA camelCase)
*- Múltiples palabras separadas por guión
*/
/* Ejemplo de nombre de ficheros
* functions.php
* wp-config.php
* mi-plugin.php
* file-manager.php
*/
Copyright© 2018 GoDaddy Iberia
Operadores Ternarios
50
Comenzamos con el mareíto…
<?php
/*
* Operadores ternarios:
*- SIEMPRE VERIFICA QUE EL CONDICIONANTE SEA POSITIVO
*/
$estado_prestamo = '';
if( $tipo_hipoteca === "fijo" ) {
$estado_prestamo = 'otorgado';
}
else {
$estado_prestamo = 'denegado';
}
// Operador ternario
// ( si condición verdadera ) ? (haz esto) : (sino haz esto);
$estado_prestamo = ( $tipo_hipoteca === "fijo" ) ? 'otorgado' : 'denegado';
// NO NO NO NO
$estado_prestamo = ( $tipo_hipoteca !== "fijo" ) ? 'denegado' : 'otorgado';
Copyright© 2018 GoDaddy Iberia
Condicionales Yoda
52
May the force be with you
<?php
/*
* Condicionales Yoda:
*- Sirven para evitar asignaciones de variables accidentales
*/
//
if ( $the_force == true ) {
$victorious = you_will( $be );
}
if ( $the_force = true ) {
$victorious = you_will( $be );
}
if ( true == $the_force ) {
$victorious = you_will( $be );
}
// Un poco bizarro leerlo es. Pero acostumbrado rápidamente
estarás.
Copyright© 2018 GoDaddy Iberia
Dos fuentes de información
54
Copyright© 2018 GoDaddy Iberia
Desarrolladores no hay poesía,
se hace poesía al programar.
57
¡Gracias! ¿Preguntas?
@maugelves

Código Bonito con PHP

  • 1.
    Copyright© 2018 GoDaddyIberia Código Bonito con PHP Poesía para tus ojos con estándares simples Mauricio Gelves - @maugelves
  • 3.
    Copyright© 2018 GoDaddyIberia PHP un código muy benévolo 3
  • 4.
    <?php /* Sólo dios yyo sabemos porqué está hecho así, y si estás leyendo esto, probablemente yo ya no trabaje aquí. Suerte */ $redsys = new SermepaTpvTpv(); if ($amount > 0) { // Si tenemos un importe... todo OK $redsys->setAmount($amount);} else { // sino tenemos un importe... nos lo inventamos y enviamos todo al entorno de pruebas. $redsys->setAmount(rand(10,600)); $entorno = "test"; $btnValue .= "- AMOUNT 0 - SETENV TEST";}
  • 5.
  • 6.
    <?php // Y esque cada programador es de su padre y de su madre $variable = "Esto es un texto"; $variable = 'Esto es un texto'; if ($variable==="Esto es un texto") { return true; } if ( $variable === "Esto es un texto" ) { return true; } if ( $variable === "Esto es un texto" ) { return true; } if ( $variable === "Esto es un texto" ) return true; if ( "Esto es un texto” === $variable ) return true;
  • 7.
    Copyright© 2018 GoDaddyIberia ¿A quién va dirigida esta charla? 7
  • 8.
    $cita = "Lasprisas pasan, las 💩 quedan."; $autor = "Pablo López | @desarrollowp”;
  • 9.
    Copyright© 2018 GoDaddyIberia Comillas dobles y simples 9
  • 10.
    <?php // COMILLAS DOBLESO SIMPLES // Opción 01 $variable = "Hello World"; // Opción 02 $variable = 'Hello World';✅ ⚠
  • 11.
    <?php // COMILLAS DOBLESO SIMPLES // Opción 03 if ( $variable == "Hello World" ) return true; // Opción 04 if ( $variable == 'Hello World' ) return true; ✅ ⚠
  • 12.
    Copyright© 2018 GoDaddyIberia Comillas dobles y simples 12 El estándar
  • 13.
    <?php // COMILLAS DOBLESO SIMPLES // Solo cuando comparamos strings usamos comillas dobles if ( $variable == "Hello World" ) return true; // Para el resto de los casos utilizamos comillas simples $variable = 'Hello World'; // Inclusive para evitar escapar caracteres $html = '<a href="http://wordpress.org">WordPress</a>';
  • 14.
    Copyright© 2018 GoDaddyIberia Identación y espacios 14 Uno de los más importantes
  • 15.
    <?php // What the… functionfoo($arguments){ if (0<count($arguments){ foreach ($arguments as $arg => $value) { echo $value; } } }
  • 16.
    <?php // Hombreeee function foo($arguments ) { if ( 0 < count( $arguments ) { foreach ( $arguments as $arg => $value ) { echo $value; } } }
  • 17.
    Copyright© 2018 GoDaddyIberia Identación 17 El estándar
  • 18.
    <?php /* === Indentación - LaIndentación debe siempre reflejar una estructura lógica. - Clases, funciones, condicionales, bucles tendrán que ser identados. - Para identar se usan TABS (no espacios). Esto permitirá una mayor flexibilidad entre distintos IDE's. */ function foo( $arguments ) { if ( 0 < count( $arguments ) { foreach ( $arguments as $arg => $value ) { echo $value; } } }
  • 19.
  • 20.
    Copyright© 2018 GoDaddyIberia Espacios 20 El estándar
  • 21.
    <?php /* === Espacios - Acada lado de operadores de comparación (<, >, ==, ===, etc), - operadores lógicos (||, &&, y !) y - operadores de asignación (=) */ if ( $x == 23 ){} if ( $foo && $bar ){} if ( ! $foo ){} array( 1, 2, 3 ) $baz . '-5' $term .= 'X'
  • 22.
    <?php /* === Espacios - Acada lado de los paréntesis de los bloques if, elseif, foreach, for, y switch */ if ( $valor == 100 ) { accion(); } elseif ( $variable == "Hola Mundo" ) { accion2(); } foreach ( $foo as $bar ) { accion3(); }
  • 23.
    <?php /* === Espacios - Cuandodefinimos una función con parámetros */ function ejecutar_accion( $parametro1 = 'foo', $parametro2 = 'var' ) {} function ejecutar_otra_accion() {}
  • 24.
    <?php /* === Espacios - Cuandollamamos funciones con parámetros */ ejecutar_accion( $parametro1, $parametro2 ); ejecutar_otra_accion();
  • 25.
    <?php /* === Espacios - Enbloques Switch no se deben dejar espacios luego de los distintos "cases" */ switch ( $foo ) { case 'hello': // correcto break; case 'world' : // incorrecto break; }
  • 26.
    Copyright© 2018 GoDaddyIberia Llaves 26 Ay ay, aquí va a caer fuego…
  • 27.
    <?php // Opción 1- Línea simple if ( condicion ) ejecutar_funcion(); ✅
  • 28.
    <?php // Opción 2- Línea simple con else if ( condicion ) ejecutar_funcion(); else ejecutar_otra_funcion(); ✅
  • 29.
    <?php // Condicionales multilíneas if( condicion ) { ejecutar_funcion(); ejecutar_otra_funcion(); } else { no_ejecutes_nada(); quieto_quedate(); } ✅
  • 30.
    Copyright© 2018 GoDaddyIberia Llaves eternas 30 Keep it simple
  • 31.
    <?php if ( condicion) { // Un FOREACH con una funcionalidad específica foreach( usuario en la base de datos ) { if( El año de la fecha de alta es menor a 2010 ) { borrar_usuario( usuario->ID ); log->escribir( 'Se borró el usuario ' . $usuario->ID ); enviar_email( 'admin@web.com', 'Se borró el usuario ' . $usuario->ID ); enviar_email( $usuario->email, 'Cuenta eliminada.' ); } } } // Un condicional UN POCO EXTENSO, ¿No?
  • 32.
    <?php if ( condition) borrar_usuarios_anteriores_al_anio( año actual - 5 años ); /** * Borra todos los usuarios con año de alta menor al parámetro especificado * @param int $anio - Año de alta de usuario */ function borrar_usuarios_anteriores_al_anio( $anio ) { foreach( usuario en la base de datos ) { if( El año de la fecha de alta es menor a $anio ) { borrar_usuario( usuario->ID ); log->escribir( 'Se borró el usuario ' . $user->ID ); enviar_email( 'admin@web.com', 'Se borró el usuario ' . $user->ID ); enviar_email( $user->email, 'Chau, ya no existes.' ); } } }
  • 33.
    Copyright© 2018 GoDaddyIberia Etiquetas PHP 33 ¿Abro y Cierro? ¿Abro solamente? ¿Shorthands?
  • 34.
    <!-- Opción 1- Shorthand --> <button class="btn__green"><?= $texto_boton; ?></button> <!-- Opción 2 - PHP Clásico --> <button class="btn__green"><?php echo $texto_boton; ?></button> ✅ ❌
  • 35.
    Copyright© 2018 GoDaddyIberia Una y solo una directriz 35
  • 36.
    <?php /* * _ _ *| | | * | | |_ _ _ __ ___ __ _ _ _ ___ ___ ___ * | . ` | | | | '_ / __/ _` | | | | / __|/ _ / __| * | | | |_| | | | | (_| (_| | | |_| __ __/__ * |_| _|__,_|_| |_|_____,_| __,_|___/___||___/ * _ _ _ _ _ _____ _ _ _____ * | | | | | | | | | | | __ | | | | __ * ___| |__ ___ _ __| |_| |__ __ _ _ __ __| |___ __| | ___ | |__) | |__| | |__) | * / __| '_ / _ | '__| __| '_ / _` | '_ / _` / __| / _` |/ _ | ___/| __ | ___/ * __ | | | (_) | | | |_| | | | (_| | | | | (_| __ | (_| | __/ | | | | | | | * |___/_| |_|___/|_| __|_| |_|__,_|_| |_|__,_|___/ __,_|___| |_| |_| |_|_| * */ /* * _ _ _ * | | | | | * | | |_ _ _ __ ___ __ _| | * | . ` | | | | '_ / __/ _` | | * | | | |_| | | | | (_| (_| |_| * |_| _|__,_|_| |_|_____,_(_) */
  • 37.
    Copyright© 2018 GoDaddyIberia Etiquetas PHP 37 Buenas prácticas no documentadas
  • 38.
    <!-- Si usamosPHP en el HTML abrimos y cerramos etiquetas —> <button class="btn__green"><?php echo $texto_boton; ?></button> <p>Soy un párrafo</p> <a href="https://google.es">Enlace a Google</a> front-page.php
  • 39.
    <?php /* * En lafuncionalidad puramente de PHP no hace falta cerrar la etiqueta * SI Y SOLO SI el fichero comienza con "<?php" pero… */ function mostrar_boton() { echo '<button class="btn__green">' . $texto_boton . '</button>'; } mi-plugin.php
  • 41.
  • 42.
  • 43.
    <?php /* * Etiquetas PHP *- Abrir y cerrar en Frontend * - Evitar cerrar etiqueta PHP si el fichero comienza con "<?php" */ ?> No, eso no se hace.
  • 44.
    Copyright© 2018 GoDaddyIberia Convenciones para nomenclaturas 44 Camel, guiones bajos y otras yerbas…
  • 45.
    <?php /* * No abrevieslos nombres innecesariamente. * Deja que tu código se explique por sí mismo. */ /* * Clases => Sustantivos * Funciones o métodos => Verbos * Variables, parámetros o atributos => lo + claro posible */
  • 46.
    <?php /* * Clases: * -Usa palabras con la primer letra mayúscula y * separados por guión bajo. * - En caso de sigla, todo en mayúscula */ // Mayúsculas class Alumnos {} // Mayúsculas con guiones bajo class Gestor_De_Transacciones {} // Mayúsculas, guiones bajo y siglas class Traductor_API_REST {} // Mayúsculas, guiones bajo y siglas class Conversor_SQL {}
  • 47.
    <?php /* * Funciones oMétodos: *- Utiliza verbos fáciles de entender, NUNCA camelCase *- Usa nombres de parámetros que completen la acción *- Parametros string en lugar de booleanos */ function abrir_fichero( $nombre_fichero ) { // Implementación de la función } function borrar_fichero( $nombre_fichero, $borrarlo_lentamente = true ) { if( $borrarlo_lentamente ) {} } function borrar_fichero( $nombre_fichero, $velocidad = 'lentamente' ) { if( $velocidad === "lentamente" ) {} } // Utilización del método abrir_fichero( 'readme.txt' ); borrar_fichero( 'readme.txt', true ); borrar_fichero( 'readme.txt', 'lentamente' );
  • 48.
    <?php /* * Variables: *- Siempreminúsculas (NUNCA camelCase) *- Múltiples palabras separadas por guión bajo */ // Definición de variables $variable = 'Hello World'; $nombre_de_fichero = 'readme.txt';
  • 49.
    <?php /* * Ficheros: *- Siempreminúsculas (NUNCA camelCase) *- Múltiples palabras separadas por guión */ /* Ejemplo de nombre de ficheros * functions.php * wp-config.php * mi-plugin.php * file-manager.php */
  • 50.
    Copyright© 2018 GoDaddyIberia Operadores Ternarios 50 Comenzamos con el mareíto…
  • 51.
    <?php /* * Operadores ternarios: *-SIEMPRE VERIFICA QUE EL CONDICIONANTE SEA POSITIVO */ $estado_prestamo = ''; if( $tipo_hipoteca === "fijo" ) { $estado_prestamo = 'otorgado'; } else { $estado_prestamo = 'denegado'; } // Operador ternario // ( si condición verdadera ) ? (haz esto) : (sino haz esto); $estado_prestamo = ( $tipo_hipoteca === "fijo" ) ? 'otorgado' : 'denegado'; // NO NO NO NO $estado_prestamo = ( $tipo_hipoteca !== "fijo" ) ? 'denegado' : 'otorgado';
  • 52.
    Copyright© 2018 GoDaddyIberia Condicionales Yoda 52 May the force be with you
  • 53.
    <?php /* * Condicionales Yoda: *-Sirven para evitar asignaciones de variables accidentales */ // if ( $the_force == true ) { $victorious = you_will( $be ); } if ( $the_force = true ) { $victorious = you_will( $be ); } if ( true == $the_force ) { $victorious = you_will( $be ); } // Un poco bizarro leerlo es. Pero acostumbrado rápidamente estarás.
  • 54.
    Copyright© 2018 GoDaddyIberia Dos fuentes de información 54
  • 57.
    Copyright© 2018 GoDaddyIberia Desarrolladores no hay poesía, se hace poesía al programar. 57
  • 58.