- BACKEND
- BEST PRACTICES
- FEBRERO 2020
Repaso a las principales novedades que nos traen las versiones 7.4.X de PHP
Suscríbete a Insights
Déjanos tu email y te mantendremos al tanto de todas nuestras publicaciones. Solo recibirás una comunicación al mes aproximadamente. Tranquilo, no mandamos spam ;)
Recientemente ha salido una nueva versión de PHP (familia 7.4.x). En este artículo queremos destacar algunas de las principales novedades de la nueva versión de este lenguaje de programación.
Funciones flechas
Las “arrow functions” o “short closures” permite tener en una única linea de código una función corta, lo bueno es que se ahorra líneas de código, la parte mala es que hace algo menos legible el código.
$titles = array_map(function ($post) {
return $posts->title();
}, $posts);
Con php 7.4 podremos hacerlo así:
$titles = array_map(fn($post) => $post->title(),$posts);
El mismo código en formato de tipado estricto sería:
$titles = array_map(fn(Post $post): string => $post->title(),$posts);
Si quieres recuperar valores por referencia se tiene que hacer de la siguiente manera:
fn&($x) => $x;
Typed properties
A partir de esta nueva versión podemos definir el tipo de atributos de las clases.
Class A
{
public int $a;
public ?string $b = 'foo';
private Foo $prop;
protected static string $static = 'default';
}
Se tiene que tener en cuenta que si intentamos usar un atributo de una clase sin inicializar la clase nos devuelve un nuevo error:
class Foo
{
public int $bar;
}
$foo = new Foo;
var_dump($foo->bar);
Fatal error: Uncaught Error: Typed property Foo::$bar
must not be accessed before initialization
Se ha añadido un nuevo estado de las variables “uninitialized” Este es un listado de pos de variables:
- bool
- int
- float
- string
- array
- iterable
- object
- *? (nullable)
- self & parent
- Classes & interfaces
Con esta funcionalidad nos ahorraremos muchos métodos de tipo getter y setter que se usaban hasta ahora para definir el tipo de la variable.
class Car
{
/**
* Car Engine
*
* @var CarEngine
*/
protected $engine
/**
* Returns the Engine instance
*
* @return CarEngine
*/
public function getEngine() : CarEngine
{
return $this->engine;
}
/**
* Sets a Car Engine
*
* @param CarEngine $engine
* @return void
*/
public function setEngine(CarEngine $engine)
{
$this->engine = $engine;
}
}
Improved type variance
Ahora podemos usar nuevos tipos de variables en el tipado:
class ParentType {}
class ChildType extends ParentType {}
class A {
public function covariantReturnTypes(): ParentType
{ /* ... */ } }
class B extends A
{
public function covariantReturnTypes(): ChildType
{ /* ... */ } }
/**
* Contraviarants arguments
*/
class A {
public function contraVariantArguments(ChildType $type)
{ /* ... */ } }
class B extends A
{
public function contraVariantArguments(ParentType $type)
{ /* ... */ } }
Null coalescing assignment operator
En la versión de PHP 7.0 teníamos la novedad operador de fusión de NULL
$data['date'] = $data['date'] ?? new DateTime();
Con php 7.4 podemos hacer también:
$data['date'] ??= new DateTime();
Array spread operator
En php 7.4 podemos hacer:
$arrayA = [1, 2, 3];
$arrayB = [4, 5];
$result = [0, ...$arrayA, ...$arrayB, 6 ,7];
// [0, 1, 2, 3, 4, 5, 6, 7]
Con esta nueva funcionalidad podemos evitar el uso de la función array_merge
. Tenemos que tener en cuenta que esta nueva funcionalidad solo funciona con arrays con indices numéricos, no funciona con diccionarios.
Numeric Literal Separator
PHP 7.4 permite usar “_” en números para separarlos visualmente, pero no afectan al valor real de los números, el motor de PHP simplemente los ignora.
$unformattedNumber = 107925284.88;
$formattedNumber = 107_925_284.88;
Boream insights
Descubre tendencias y sigue el día a día de nuestros proyectos.
Ver todos los insights-
Backend Best practices
Aplicando soluciones de Inteligencia Artificial para la creación de Chatbots en Drupal
Con la rápida evolución de la Inteligencia Artificial (IA), las empresas y organizaciones buscan cada vez más formas de automatizar la atención al cliente y mejorar la experiencia del usuario. Los chatbots, impulsados por tecnologías de IA, se han convertido en una solución popular para estas necesidades. Drupal, con su arquitectura modular y flexible, es una plataforma ideal para integrar estas soluciones.
-
UX-CX
Solid, UX y datos personales. ¿Una utopía o una realidad?
Solid es una tecnología basada en los estándares actuales de Internet que permite la organización de datos e identidades en las aplicaciones que desarrollemos. Hasta aquí poca cosa nueva. La revolución viene dada porque con esta tecnología es el propio usuario quien tiene el control de sus datos y quien da el permiso de uso a las compañías a través de un WebID.
-
Diseño UX-CX Research
Sesgos cognitivos y prejuicios en los procesos de diseño de interfaz: como combatirlos
Como diseñadores de interfaz y de experiencia de usuario debemos tomar decisiones rápidas que impactan de manera notable en el resultado final de nuestros productos digitales. Generalmente no somos conscientes de que estas decisiones pueden verse profundamente afectadas por una interpretación errónea de la realidad, sesgada por nuestra propia experiencia y alejada de una comprensión racional del entorno.
-
Backend Best practices
Desarrollo Drupal conexión con LDAP: control de acceso.
Tras el primer insight donde comentamos los pasos básicos de conexión de un desarrollo Drupal con un Sistema LDAP, en esta nueva entrega profundizamos en algunos aspectos más avanzados o particulares.