Entorn de treball

Inicia una nova sessió Windows Subsystem for Linux.

A continuació crearem una nova aplicació Laravel en un directori web-php:

$ curl -s "https://laravel.build/web-php" | bash

Si vols crear el projecte en una altra carpeta pots utilitzar una altre nom enlloc d'web-php.

La instal·lació de Sail pot trigar uns quants minuts mentre els contenidors d'aplicacions de Sail es construeixen a la màquina virtual.

El motiu és que a més de l'aplicació web s'instal.len altres serveis que necessita l'aplicació web: TODO

Un cop creat el projecte, pots navegar al directori web-php i iniciar Laravel Sail.

Laravel Sail proporciona una interfície de línia d'ordres senzilla per interactuar amb la configuració predeterminada de Docker de Laravel:

$ cd web-php
$ ./vendor/bin/sail up

Un cop s'hagin iniciat els contenidors Docker de l'aplicació, obre un altre terminal i executa les migracions de la base de dades de l'aplicació :

./vendor/bin/sail artisan migrate

Ja pots accedir a l'aplicació desde un navegador a l'adreça http://localhost:

El contingut que es mostra el proporciona el fitxer routes/web.php:

<?php

use Illuminate\Support\Facades\Route;

Route::get('/', function () {
    return view('welcome');
});

El que fa el codi és executar una funció anònima que retorna una vista amb el nom welcome quan l'aplicació reb una petició a la ruta /.

Primers passos

Modifica el contingut de la funció anònima del fitxer routes/web.php tal com es mostra a continuació:

<?php

use Illuminate\Support\Facades\Route;

Route::get('/', function () {
    return "<h1>Hello World!</h1>";
});

Torna a carregar la pàgina del servidor:

Pots veure que l'aplicació retorna <h1>Hello World!</h1>.

Per estar segurs, farem el mateix amb curl:

$ curl localhost ; echo
<h1>Hello World!</h1>

També pots veure que localhost i localhost/ és el mateix:

$ curl localhost/ ; echo
<h1>Hello World!</h1>

/ és la ruta per defecte si no s'indica cap.

També pots veure que l'aplicació no té definida cap altra ruta:

404 | NOT FOUND vol dir que la pàgina no existeix.

Prova altres rutes; totes seran "Not Found".

I per últim que la funció pot retornar una operació matèmatica:

Route::get('/', function () {
    return 3 +5;
});

En aquest cas el resultat és 8:

$ curl localhost; echo
8

Variables

Les variable es representen amb un signe de dolar seguit del nom de la variable:

Route::get('/', function () {
    $sum = 7 +5;
    return $sum;
});

Pots veure que l'aplicació torna el contingut de la variable $sum:

$ curl localhost; echo
12

PHP distingueix entre majúscules y minúscules. Per tant no és le mateix $sum que $Sum:

Route::get('/', function () {
  $sum = 3 + 10;
  $Sum = 8 + 20;
  echo $sum;
});

El resultat és 13:

$ curl localhost; echo
13

Com en tot llenguatge de programació, no tots els noms de variables són vàlids.

Un nom de variable és vàlid si comença amb una lletra o un guió baix _, seguit de qualsevol nombre de lletres, números o guions baixos.

Como en todo lenguage de programación, no todos los nombres de variables son validos.

Asignación por referencia

TODO continuar revisió

Por defecto, las variable siempre se assignan por valor: cuando asignas una expresión a una variable, el valor de la expresión original se copia a la variable de destino.

En este ejemplo copiamos el valor de la variable $a en la variable $b, y luego modificamos el valor de la variable $a.

<?php
$a = "hello";
$b = $a;
$a = "bye";

echo $b;

Compo puedes ver a continuación , el variable de la variable $b es hello:

$ curl localhost:3000
hello

En lugar de asignar por valor podemos asignar por referencia utilitzando el símbolo ampersand (&) al inicio de la variable.

Modifica el ejemplo anterior para que la variable $b tenga una referencia a la variable $a en lugar del valor de la variable $a:

<?php
$a = "hello";
$b = &$a;
$a = "bye";

Puedes ver que ahora el servidor devuelve bye en lugar de hello:

$ curl localhost:3000
bye

Inicialización

En PHP puedes declar una variable sin asignar un valor.

<?php 
$a;

La variable $a tendrá un valor por defecto en función del contexto en que se utilice.

Por ejemplo, en este caso estamos sumando 3 a la variable $a:

<?php
echo $a + 3;

Como la variable $a no tienen ningún valor asigandor, por defecto se considera que su valor és zero.

Puedes ver que el resultado de la suma és 3 ( 0 + 3):

$ curl localhost:3000
3

A continuación tienes una lista con los valores por defecto según el tipo inferido de la variable:

  • Un bool por defecto és false.
  • Un int o float por defecto tienen el valor 0.
  • Un string por defecto és "" (un string vacío)
  • Un array por defecto és [] (un array vacío).

foreach

La construcció foreach proporciona una manera senzilla d'iterar sobre arrays. foreach només funciona amb arrays i objectes, i generarà un error quan intenteu utilitzar-lo en una variable amb un tipus de dades diferent o una variable no inicialitzada.

Hi ha dues sintaxis: foreach($xs as $x) i foreach($xs as $k => $v).

El primer foreach recorre l'iterable donat per $xs. A cada iteració, el valor de l'element actual s'assigna a $x.

El segon foreach assignarà addicionalment la clau de l'element actual a la variable $k de cada iteració.

<?php
$countries = ["es" => "Espanya", "fr" => "França"];

foreach ($countries as $country) {
    echo "$country, ";
}

foreach ($countries as $code => $country) {
    echo "$code: $country, ";
}
?>

Per poder modificar directament els elements de la matriu dins del bucle, precedeix el valor $ amb &. En aquest cas, el valor s'assignarà per referència.

$arr = array(1, 2, 3, 4);
foreach ($arr as &$value) {
    $value = $value * 2;
}
// $arr ara és array(2, 4, 6, 8)
unset($value); // trenca la referència amb l'últim element

Arrays

L' array és potser l'estructura genèrica de dades més utilitzada en PHP que haureu d'utilitzar en PHP. Es tracta d'un mapa ordenat, una estructura que associa valors a claus. L'equivalent en java seria java.util.SortedMap<K,V>.

A diferència de java, un array en PHP està optimitzat per a diversos usos: és pot utilitzar com un array, una llista (vector), una taula hash (implementació d'un mapa), diccionari, col·lecció, pila, cua i probablement molts altres.

Com que els valors d'un array poden ser altres arrays, també és possible construir arrays d'arrays.

Crear un array

Es pot crear un array mitjançant la funció array(), que pren qualsevol nombre de parells de claus => valor separats per comes com a arguments.

Tambè podeu utilitzar [] enlloc d'array(). Es tracta d'una ajuda síntactica, i mai estareu creant una estructura fixa com és el cas d'un array en java (p.e. new int[10].)


<?php
$array = array(
    "foo" => "bar",
    "bar" => "foo",
);

// Using the short array syntax
$array = [
    "foo" => "bar",
    "bar" => "foo",
];
?>

La clau és opcional. Si no s’especifica, PHP utilitzarà una clau incremental. Aquest fet us pot confondre i fer pensar que un array en python és el mateix que un [] o una java.util.List de Java, enlloc d'un java.util.SortedMap.

<?php
$array = array("foo", "bar", "hello", "world");
var_dump($array);
?>

Funciones

A function may be defined using syntax such as the following:

<?php
function foo($arg_1, $arg_2, /* ..., */ $arg_n)
{
    echo "Example function.\n";
    return $retval;
}
?>

Any valid PHP code may appear inside a function, even other functions and class definitions.

...

Funciones anónimas

Les funcions anònimes, també conegudes com a closuresLes funcions anònimes, també conegudes com a "tancaments", permeten la creació de funcions que no tenen un nom especificat. Són més útils com a valor de paràmetres cridables, però tenen molts altres usos.

Les funcions anònimes s’implementen mitjançant la classe Closure.

test.php

<?php
$xs = [1, 2, 3];
$xs = array_map(fn ($x) => $x * 2, $xs);
print_r($xs);

Funciones "arrow"

Veure arrow functions