Entorn de treball
Crea una màquina amb Docker.
A continuació crearem una nova aplicació Laravel en un directori web-php
:
$ curl -s "https://laravel.build/web-php" | bash
latest: Pulling from laravelsail/php83-composer
8a1e25ce7c4f: Pull complete
...
Get started with: cd web-php && ./vendor/bin/sail up
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 ésfalse
. - Un
int
ofloat
por defecto tienen el valor 0. - Un
string
por defecto és""
(unstring
vacío) - Un
array
por defecto és[]
(unarray
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 closures
Les 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