# Cosas de PHP

Tips de PHP que cada día va más rápido

# Expandir variables :: Sintaxis compleja (curva)

Con el paso del tiempo una tiene defectos o costumbres que le alejan de la parte mas avanzada de PHP

Una de ellas es la [Sintaxis compleja (curva)](https://www.php.net/manual/en/language.types.string.php#language.types.string.parsing.complex)

Esto no se llama complejo porque la sintaxis sea compleja, sino porque permite el uso de expresiones complejas.

Cualquier variable escalar, elemento de matriz o propiedad de objeto con una representación de cadena se puede incluir a través de esta sintaxis. La expresión se escribe de la misma manera que aparecería fuera de la cadena y luego se envuelve entre { y }. 

```php
// sin Complex (curly) syntax
$word = 'PHP';
$sentence = 'I just love ' . $word . '.';

// con Complex (curly) syntax
$word = 'PHP';
$sentence = "I just love  {$word}.";
```

Otros usos mas complejos y divertidos.

```php
echo "I just love {$foo['word']}";
echo "I just love {$foo->getWord()}";
```

## Seguridad
No usar en la entradas de usuario (input user) ya que de lo contrario el usuario podría acceder a las variables ya declaradas.

### Prueba de concepto
```php 
<?php

$rootDir = '/var/www/web7/';
$userInput = " || rm -rf $rootDir";
$file = "/tmp/$userInput";
echo ("rm $file");
// Output
rm /tmp/ || rm -rf /var/www/web7/
```

##### Aviso
Esta documentación y su contenido, no implica que funcione en tu caso o determinados casos. 
También implica que tienes conocimientos sobre lo que trata, y que en cualquier caso tienes copias de seguridad.
El contenido el contenido se entrega, tal y como está, sin que ello implique ningún obligación ni responsabilidad por parte de [Castris](https://castris.com)

Si necesitas soporte profesional puedes contratar con Castris [soporte profesional](https://intranet.castris.com/cart.php?gid=18).

# Como instalar un fork en un proyecto con composer.

# Instalar forks en proyecto

A veces, quieres colaborar con un el desarrollo de un paquete,  y para ello realizas un fork, te lo baja a local y realizas los cambios, los tests, y subes una request. 

Pero por lo que sea necesitas usar ese fork en tu programa, mientras se acepta el **PR** o **pull request**

## Solución
### composer.json

```json
   "require": {
   ...
       "vendor/paquete": "@dev"
   },
   ...    

   "repositories": [
        {
            "type": "path",
            "url": "/Users/user/Sites/fork-paquete",
            "options": {
                "symlink": true
            }
        }
    ],
    "config": {
   		"preferred-install": "dist",
       "prefer-source": true, 
       ...
    },
    "minimum-stability": "stable",
    "prefer-stable": true   
```

##### Aviso
Esta documentación y su contenido, no implica que funcione en tu caso o determinados casos. 
También implica que tienes conocimientos sobre lo que trata, y que en cualquier caso tienes copias de seguridad.
El contenido el contenido se entrega, tal y como está, sin que ello implique ningún obligación ni responsabilidad por parte de [Castris](https://castris.com)

Si necesitas soporte profesional puedes contratar con Castris [soporte profesional](https://intranet.castris.com/store/soporte-profesional).