Bucle while true (PHP)

En PHP, el bucle while s’utilitza per executar un bloc de codi mentre una condició sigui certa. La sintaxi bàsica és:

while (condició) {
    // Codi a executar
}

Si el que vols és un bucle infinit, pots utilitzar while (true), que s’executarà indefinidament fins que es trobi una instrucció break o es tanqui el programa:

while (true) {
    echo "Aquest bucle no s'atura mai!";
}

Pel que fa a la sintaxi que has escrit (while(1)- | codi | buclw-- al while), sembla que hi ha errors de format. Si vols un bucle que executi un bloc de codi repetidament, pots estructurar-lo així:

while (1) {
    // Codi a executar
}

Si necessites més informació, pots consultar la documentació oficial de PHP o una guia pràctica sobre el bucle while en PHP.

Array indexat ($linies = file($fitxer)

Per comptar el nombre de línies d’un array en PHP, pots utilitzar la funció count(). Així, si has llegit el fitxer en un array amb file($fitxer), pots obtenir el nombre de línies amb:

$nombre_linies = count($array_preguntes);
echo "El fitxer té $nombre_linies línies.";

Aquesta funció compta el nombre d’elements dins l’array $array_preguntes, que corresponen a les línies del fitxer llegit. Si tens algun altre dubte sobre el maneig de fitxers en PHP, aquí estic per ajudar-te! 😊

Pots utilitzar la funció rand() de PHP per generar un número aleatori entre 0 i $nombre_linies - 1. Aquí tens la funció que ho fa:

function aleatoria($nombre_linies) {
    return rand(0, $nombre_linies - 1);
}

$num_linia = aleatoria($nombre_linies);
echo "Número de línia seleccionat: $num_linia";

Aquesta funció assegura que el valor generat estigui dins del rang correcte (entre 0 i $nombre_linies - 1). Això és útil si $nombre_linies representa el nombre total de línies d’un fitxer o d’un array.

Si vols una alternativa més moderna, pots usar random_int() per millorar la seguretat i la generació de nombres aleatoris:

function aleatoria($nombre_linies) {
    return random_int(0, $nombre_linies - 1);
}

T’agradaria que l’integréssim amb una altra part del teu codi? 😊

Sí, exactament! La funció count($array_preguntes) retorna el nombre total d’elements dins de l’array, i en aquest cas, com file($fitxer) llegeix cada línia del fitxer com un element de l’array, count($array_preguntes) et donarà el nombre de línies del fitxer.

Si necessites obtenir un subconjunt específic de línies o processar-les d’una manera concreta, pots recórrer l’array amb un foreach o utilitzar array_slice() per seleccionar una part. Vols que t’ajudi a estructurar algun altre tipus de processament? 😊

Sí! Pots carregar una pregunta aleatòria de l’array mitjançant la funció rand() o random_int(). Aquí tens el codi per seleccionar una línia aleatòria i extreure la pregunta:

function obtenirPreguntaAleatoria($array_preguntes) {
    $nombre_linies = count($array_preguntes);
    if ($nombre_linies > 0) {
        // Selecciona un número aleatori entre 0 i nombre de línies - 1
        $num_linia = random_int(0, $nombre_linies - 1);

        // Separa pregunta i resposta (assumint que la separació és " > ")
        $parts = explode(' > ', trim($array_preguntes[$num_linia]));

        // Retorna només la pregunta
        return $parts[0] ?? "Pregunta no trobada";
    }

    return "No hi ha preguntes disponibles.";
}

// Exemple d'ús
$array_preguntes = file($fitxer); // Llegeix el fitxer i carrega les línies en un array
$pregunta_aleatoria = obtenirPreguntaAleatoria($array_preguntes);
echo "Pregunta aleatòria: " . $pregunta_aleatoria;

Aquest codi:

  1. Calcula el nombre de línies de l’array.
  2. Selecciona una línia aleatòria.
  3. Separa la pregunta i la resposta mitjançant explode(' > ').
  4. Retorna la pregunta aleatòria.

Si la separació entre pregunta i resposta és diferent (/, : o un altre caràcter), només has de modificar el delimitador dins explode().

Sembla que hi ha un petit error en el retorn de la funció obtenirPreguntaAleatoria(). Quan vols retornar tant la pregunta com la resposta, hauríem d’utilitzar un array en lloc d’intentar retornar dues variables separades amb una coma. També hi ha un petit problema amb $resposta=, que falta completar. Aquí tens el codi corregit:

function obtenirPreguntaAleatoria($array_preguntes) {
    $nombre_linies = count($array_preguntes);

    if ($nombre_linies > 0) {
        // Selecciona un número aleatori entre 0 i nombre de línies - 1
        $num_linia = random_int(0, $nombre_linies - 1);

        // Separa pregunta i resposta (assumint que la separació és " > ")
        $parts = explode(' > ', trim($array_preguntes[$num_linia]));

        // Retorna la pregunta i la resposta com un array
        return [
            'pregunta' => $parts[0] ?? "Pregunta no trobada",
            'resposta' => $parts[1] ?? "Resposta no trobada"
        ];
    }

    return [
        'pregunta' => "No hi ha preguntes disponibles.",
        'resposta' => ""
    ];
}

// Exemple d'ús
$array_preguntes = file($fitxer); // Llegeix el fitxer i carrega les línies en un array
$pregunta_resposta = obtenirPreguntaAleatoria($array_preguntes);

// Extraiem la pregunta i la resposta de l'array retornat
$pregunta = $pregunta_resposta['pregunta'];
$resposta = $pregunta_resposta['resposta'];

echo "Pregunta aleatòria: " . $pregunta . "<br>";
echo "Resposta: " . $resposta;

exit('67 estud');

Correccions i millores realitzades:

  1. Corregit el retorn: Ara la funció retorna un array associatiu amb les claus 'pregunta' i 'resposta', en lloc de fer un retorn incorrecte amb una coma.
  2. Millora en la gestió dels valors: Si explode() no troba una resposta, la funció assegura que es retorna un missatge alternatiu.
  3. Correcció en la assignació $resposta=: Ara extraiem correctament la pregunta i la resposta de l’array retornat.

Per esborrar un element d’un array en PHP, pots utilitzar la funció unset(). Aquesta funció elimina un element específic de l’array sense reordenar-lo. Aquí tens un exemple aplicat a $array_preguntes:

// Suposant que vols eliminar l'element en la posició $num_linia
unset($array_preguntes[$num_linia]);

// Si vols reordenar els índexs després d'esborrar un element:
$array_preguntes = array_values($array_preguntes);

Explicació:

  1. unset($array_preguntes[$num_linia]); – Elimina l’element especificat sense modificar la resta de l’array.
  2. array_values($array_preguntes); – Reorganitza els índexs perquè siguin consecutius després de l’eliminació (si és necessari).

Sí! Quan fas servir unset($array_preguntes[5]);, elimines la línia 5 però els índexs de l’array continuen sent els mateixos. Això vol dir que si fas print_r($array_preguntes);, veuràs que la clau 5 ja no existeix, però les altres línies mantenen els seus índexs originals.

Si vols que la línia 6 es converteixi en la nova línia 5, has de reordenar els índexs amb array_values(), així:

unset($array_preguntes[5]); // Esborra la línia 5
$array_preguntes = array_values($array_preguntes); // Reorganitza els índexs

Ara print_r($array_preguntes); mostrarà l’array amb índexs seqüencials, i la línia 6 (que abans venia després de la 5) ocuparà la posició 5.

Si vols que el teu codi informi quan no hi ha línies disponibles després d’eliminar elements, pots afegir una verificació abans de seleccionar una pregunta aleatòria. Aquí tens el codi complet corregit:

function obtenirPreguntaAleatoria(&$array_preguntes) {
    // Comprova si queden línies disponibles
    $nombre_linies = count($array_preguntes);
    if ($nombre_linies === 0) {
        return [
            'pregunta' => "No hi ha preguntes disponibles.",
            'resposta' => ""
        ];
    }

    // Selecciona una línia aleatòria
    $num_linia = random_int(0, $nombre_linies - 1);

    // Separa pregunta i resposta (assumint que la separació és " > ")
    $parts = explode(' > ', trim($array_preguntes[$num_linia]));

    // Esborra la línia seleccionada
    unset($array_preguntes[$num_linia]);

    // Reorganitza els índexs perquè siguin consecutius
    $array_preguntes = array_values($array_preguntes);

    // Retorna la pregunta i la resposta com un array
    return [
        'pregunta' => $parts[0] ?? "Pregunta no trobada",
        'resposta' => $parts[1] ?? "Resposta no trobada"
    ];
}

// Exemple d'ús
$array_preguntes = file($fitxer); // Llegeix el fitxer i carrega les línies en un array
while (count($array_preguntes) > 0) {
    $pregunta_resposta = obtenirPreguntaAleatoria($array_preguntes);
    echo "Pregunta aleatòria: " . $pregunta_resposta['pregunta'] . "<br>";
    echo "Resposta: " . $pregunta_resposta['resposta'] . "<br>";
}

// Quan no hi ha més preguntes
echo "Totes les preguntes s'han esgotat!";

exit('67 estud');

Què fa aquest codi?

  1. Comprova si queden línies disponibles: Si count($array_preguntes) === 0, retorna el missatge “No hi ha preguntes disponibles.”
  2. Selecciona i esborra una línia aleatòria: unset($array_preguntes[$num_linia]); elimina la línia seleccionada.
  3. Reorganitza els índexs: array_values($array_preguntes); assegura que les posicions de l’array continuïn consecutives.
  4. Executa fins que no hi hagi preguntes: L’estructura while (count($array_preguntes) > 0) garanteix que es generin preguntes fins a esgotar-les.
  5. Mostra un avís quan ja no hi ha preguntes disponibles: "Totes les preguntes s'han esgotat!"

Exactament! Si vas eliminant les línies del principi (o d’un punt aleatori) i reorganitzes l’array, estàs simulant el comportament d’una cua (queue), on els elements es processen en ordre d’arribada i desapareixen una vegada utilitzats.

Si vols gestionar-ho explícitament com una cua, podries utilitzar array_shift(), que extreu i retorna el primer element de l’array, mantenint la resta:

$pregunta_resposta = explode(' > ', trim(array_shift($array_preguntes)));
$pregunta = $pregunta_resposta[0] ?? "Pregunta no trobada";
$resposta = $pregunta_resposta[1] ?? "Resposta no trobada";

Aquest enfocament és útil si vols evitar la necessitat de reordenar els índexs amb array_values(), ja que sempre treballaràs amb el primer element disponible.

No exactament! Els arrays que estàs manipulant amb file($fitxer) es comporten com arrays indexats, no com a arrays associatius.

Diferències:

  • Array indexat (el teu cas): Les claus són numèriques i generades automàticament (0, 1, 2, …).
  $array_preguntes = ["Pregunta 1 > Resposta 1", "Pregunta 2 > Resposta 2"];
  echo $array_preguntes[0]; // Mostra la primera línia

Això és el que tens amb file($fitxer), perquè cada línia del fitxer es guarda amb un índex numèric.

  • Array associatiu: Les claus són definides manualment i poden ser noms.
  $preguntes = [
      "pregunta1" => "Resposta 1",
      "pregunta2" => "Resposta 2"
  ];
  echo $preguntes["pregunta1"]; // Mostra la resposta associada

Simulació d’un array associatiu:

Si vols convertir el teu array de preguntes en un array associatiu (on la pregunta sigui la clau i la resposta el valor), pots fer això:

$preguntes_associatiu = [];
foreach ($array_preguntes as $linia) {
    $parts = explode(' > ', trim($linia));
    $preguntes_associatiu[$parts[0]] = $parts[1] ?? "Resposta no disponible";
}

print_r($preguntes_associatiu);

D’aquesta manera, podràs accedir a les respostes de manera associativa, com echo $preguntes_associatiu["camera"];.

Publicat dins de PHP

Funció: escriu_a_fitxer usant (usant __DIR__)

El directori on es crea el fitxer és on es troba el fitxer PHP actual (usant __DIR__)

<?php
function escriu_a_fitxer($nomFitxerRelatiu, $contingut, $afegir = false) {
    // Ruta completa del fitxer
    $ruta = __DIR__ . '/' . $nomFitxerRelatiu;

    // Mode d'obertura: 'a' per afegir, 'w' per sobreescriure
    $mode = $afegir ? 'a' : 'w';

    $fp = fopen($ruta, $mode);
    if (!$fp) {
        echo "Error: no s'ha pogut obrir el fitxer $ruta.";
        return false;
    }

    fwrite($fp, $contingut);
    fclose($fp);
    echo "Fitxer escrit correctament a: $ruta<br>";
    return true;
}
?>
Publicat dins de PHP

les superglobals com $_SESSION són exclusives de PHP

Exemples típics de superglobals en PHP:

$_SESSION

$_GET

$_POST

$_COOKIE

$_FILES

$_SERVER

$_REQUEST

$_ENV

$GLOBALS

Aquestes no existeixen com a tals en altres llenguatges com Python, JavaScript, Ruby o Java. Resum:

Però la idea de “sessions” és comuna a molts llenguatges — simplement s’implementa diferent.

Sí, $_SESSION és exclusiu de PHP.


$_SESSION['resposta'] no és una pila ni una cua

Ara mateix, la variable $_SESSION['resposta'] és simplement una cadena de text (string), no una estructura de dades com una pila (stack) o una cua (queue). Això vol dir que quan tu fas:

$_SESSION['resposta'] .= $fila['catala'] . " - " . $fila['castella'] . "\n\n";

Només estàs afegint text al final d’una cadena, i no tens accés directe a la línia n com si fos un array o una estructura indexada.

Com podries accedir a una línia específica?

Si vols accedir, per exemple, a la línia 3 de la resposta, primer has de convertir la cadena en un array de línies amb explode("\n", ...), així:

$linies = explode("\n", $_SESSION['resposta']);
$linia3 = $linies[2]; // Recorda que comença a comptar des de 0

Camps de les taules de Polidic. Editar Registre

id
catala
pron
tipus
c_a_t
qualificador
castella
ajuda
data_creacio
data_modif
found
num_alea
encert
nota
estrelles
aux

==============editar registre=================

  1. Obtenció del registre per editar:
    • Si l’usuari accedeix al formulari amb un paràmetre id (per exemple, editar.php?id=1), es realitza una consulta preparada per obtenir totes les dades del registre corresponent.

edit.php

<?php
// Configuració de la connexió a la base de dades
$servername = "localhost";
$username = "root"; // Substitueix pel teu usuari
$password = "";     // Substitueix per la teva contrasenya
$dbname = "word";   // Nom de la base de dades

// Crear connexió
$conn = new mysqli($servername, $username, $password, $dbname);

// Comprovar la connexió
if ($conn->connect_error) {
    die("Error de connexió: " . $conn->connect_error);
}

// Variables per emmagatzemar les dades del registre
$id = "";
$update_success = false;

// Inicialitzar variables per cada camp de la taula
$data = [
    'catala' => '',
    'pron' => '',
    'tipus' => '',
    'c_a_t' => '',
    'qualificador' => '',
    'castella' => '',
    'ajuda' => '',
    'data_creacio' => '',
    'data_modi' => '',
    'found' => 0,
    'num_alea' => 0,
    'encert' => 0,
    'nota' => '',
    'estrelles' => 0,
    'aux' => ''
];

// Si s'envia el formulari per POST
if ($_SERVER["REQUEST_METHOD"] == "POST") {
    // Validar i obtenir l'ID del registre
    $id = intval($_POST['id']); // Assegurar que l'ID sigui un enter

    // Obtenir i sanejar les dades del formulari
    foreach ($data as $key => &$value) {
        if (isset($_POST[$key])) {
            $value = $conn->real_escape_string(trim($_POST[$key]));
        }
    }

    // Actualitzar el registre amb una consulta preparada
    $sql = "UPDATE diccionari SET 
                catala = ?, pron = ?, tipus = ?, c_a_t = ?, qualificador = ?, 
                castella = ?, ajuda = ?, data_creacio = ?, data_modi = ?, 
                found = ?, num_alea = ?, encert = ?, nota = ?, estrelles = ?, aux = ? 
            WHERE id = ?";
    $stmt = $conn->prepare($sql);

    if ($stmt) {
        // Vincular tots els paràmetres
        $stmt->bind_param(
            "ssssssssiisissii", // Tipus de dades: cadenes (s), enters (i)
            $data['catala'], $data['pron'], $data['tipus'], $data['c_a_t'], $data['qualificador'],
            $data['castella'], $data['ajuda'], $data['data_creacio'], $data['data_modi'],
            $data['found'], $data['num_alea'], $data['encert'], $data['nota'], $data['estrelles'], $data['aux'],
            $id
        );

        if ($stmt->execute()) {
            $update_success = true; // Indicar que l'actualització ha estat exitosa
        } else {
            echo "Error en l'actualització: " . $stmt->error;
        }
        $stmt->close();
    } else {
        echo "Error en preparar la consulta: " . $conn->error;
    }
}

// Obtenir el registre seleccionat per ID (si s'especifica)
if (isset($_GET['id'])) {
    $id = intval($_GET['id']); // Assegurar que l'ID sigui un enter

    // Consulta per obtenir les dades del registre
    $sql = "SELECT id, catala, pron, tipus, c_a_t, qualificador, castella, ajuda, 
                   data_creacio, data_modi, found, num_alea, encert, nota, estrelles, aux 
            FROM diccionari WHERE id = ?";
    $stmt = $conn->prepare($sql);

    if ($stmt) {
        $stmt->bind_param("i", $id); // "i" = enter
        $stmt->execute();
        $stmt->store_result();

        if ($stmt->num_rows > 0) {
            $stmt->bind_result(
                $id, $data['catala'], $data['pron'], $data['tipus'], $data['c_a_t'], $data['qualificador'],
                $data['castella'], $data['ajuda'], $data['data_creacio'], $data['data_modi'],
                $data['found'], $data['num_alea'], $data['encert'], $data['nota'], $data['estrelles'], $data['aux']
            );
            $stmt->fetch(); // Emplenar les variables amb les dades del registre
        } else {
            echo "No s'ha trobat cap registre amb l'ID especificat.";
        }
        $stmt->close();
    } else {
        echo "Error en preparar la consulta: " . $conn->error;
    }
}

// Tancar la connexió
$conn->close();
?>

<!DOCTYPE html>
<html lang="ca">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Editar Registre</title>
</head>
<body>
    <h1>Editar Registre</h1>

    <?php if ($update_success): ?>
        <p style="color:green;">Registre actualitzat correctament.</p>
    <?php endif; ?>

    <!-- Formulari per editar el registre -->
    <form method="POST" action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]); ?>">
        <input type="hidden" name="id" value="<?php echo htmlspecialchars($id); ?>">

        <label for="catala">Català:</label><br>
        <input type="text" id="catala" name="catala" value="<?php echo htmlspecialchars($data['catala']); ?>" required><br><br>

        <label for="pron">pronunciació:</label><br>
        <input type="text" id="pron" name="pron" value="<?php echo htmlspecialchars($data['pron']); ?>"><br><br>

        <label for="tipus">Tipus:</label><br>
        <input type="text" id="tipus" name="tipus" value="<?php echo htmlspecialchars($data['tipus']); ?>"><br><br>

        <label for="c_a_t">Categoria:</label><br>
        <input type="text" id="c_a_t" name="c_a_t" value="<?php echo htmlspecialchars($data['c_a_t']); ?>"><br><br>

        <label for="qualificador">Qualificador:</label><br>
        <input type="text" id="qualificador" name="qualificador" value="<?php echo htmlspecialchars($data['qualificador']); ?>"><br><br>

        <label for="castella">Castellà:</label><br>
        <input type="text" id="castella" name="castella" value="<?php echo htmlspecialchars($data['castella']); ?>"><br><br>

        <label for="ajuda">Ajuda:</label><br>
        <textarea id="ajuda" name="ajuda" rows="4" cols="50"><?php echo htmlspecialchars($data['ajuda']); ?></textarea><br><br>

        <label for="data_creacio">Data de creació:</label><br>
        <input type="date" id="data_creacio" name="data_creacio" value="<?php echo htmlspecialchars($data['data_creacio']); ?>"><br><br>

        <label for="data_modi">Data de modificació:</label><br>
        <input type="date" id="data_modi" name="data_modi" value="<?php echo htmlspecialchars($data['data_modi']); ?>"><br><br>

        <label for="found">Freqüència/Trobada:</label><br>
        <input type="number" id="found" name="found" value="<?php echo htmlspecialchars($data['found']); ?>"><br><br>

        <label for="num_alea">Número aleatori:</label><br>
        <input type="number" id="num_alea" name="num_alea" value="<?php echo htmlspecialchars($data['num_alea']); ?>"><br><br>

        <label for="encert">Encerts:</label><br>
        <input type="number" id="encert" name="encert" value="<?php echo htmlspecialchars($data['encert']); ?>"><br><br>

        <label for="nota">Notes:</label><br>
        <textarea id="nota" name="nota" rows="4" cols="50"><?php echo htmlspecialchars($data['nota']); ?></textarea><br><br>

        <label for="estrelles">Nombre d'estrelles:</label><br>
        <input type="number" id="estrelles" name="estrelles" value="<?php echo htmlspecialchars($data['estrelles']); ?>"><br><br>

        <label for="aux">Camp auxiliar:</label><br>
        <input type="text" id="aux" name="aux" value="<?php echo htmlspecialchars($data['aux']); ?>"><br><br>

        <button type="submit">Actualitzar</button>
    </form>

    <!-- Enllaç per tornar a la pàgina principal (opcional) -->
    <p><a href="index.php">Tornar al llistat</a></p>
</body>
</html>

$_GET[‘dic’] i $_GET[‘lang] per passar informació a un formulari (dintre de la mateixa carpeta)

Per recollir les variables $_GET['dic'] i $_GET['lang] de la informació passada a través del navegador, podeu utilitzar el següent codi PHP:

<?php
// Recollir les variables del GET
$diccionari = isset($_GET['dic']) ? $_GET['dic'] : 'No definit';
$llenguatge = isset($_GET['lang']) ? $_GET['lang'] : 'No definit';

// Mostrar les variables
echo "El diccionari és: " . htmlspecialchars($diccionari) . "<br>";
echo "El llenguatge és: " . htmlspecialchars($llenguatge);
?>

per example si al navegador veiem: 192.168.1.41/poli/BD_conexions/conexio_diccionari_bd.php?dic=catala_castella&lang=cat

Al formulari que mostra les variables podem llegir:

El diccionari és: catala_castella
El llenguatge és: cat

$idioma = isset($_GET[‘lang’]) ? $_GET[‘lang’] : ‘cat’;

Aquesta instrucció és una forma concisa de definir una variable $idioma en funció de si el paràmetre lang existeix a l'URL. Això es fa utilitzant l'operador ternari, que és una alternativa compacta al condicional if-else. Aquí tens com funciona pas a pas:

isset($_GET['lang']):

Verifica si existeix el paràmetre lang a l'URL. Si l'usuari accedeix a la pàgina amb un enllaç del tipus index.php?lang=eus, llavors isset($_GET['lang']) tornarà true.

$_GET['lang']:

Si el paràmetre lang existeix (és a dir, isset($_GET['lang']) és true), el valor d'aquest paràmetre s'assignarà a $idioma. Per exemple, si l'URL és index.php?lang=eng, el valor de $idioma serà 'eng'.

: 'cat':

Si el paràmetre lang no existeix (és a dir, isset($_GET['lang']) és false), el valor per defecte 'cat' (català) s'assignarà a $idioma.

PHP al llarg del anys

PHP ha experimentat moltes millores significatives des de la seva creació fins a l’actualitat. Aquí tens un resum de les millores més destacades a través dels anys:

PHP 4 (2000)

  • Zend Engine 1: Millorat el rendiment i la gestió de la memòria.
  • Sessions: Introducció de la gestió de sessions.
  • Objectes i classes: Millor suport per a la programació orientada a objectes (OOP).

PHP 5 (2004)

  • Zend Engine 2: Millorat encara més el rendiment i la gestió de la memòria.
  • XML i Web Services: Suport millorat per XML i serveis web.
  • Namespaces: Introducció de namespaces per evitar col·lisions de noms.
  • Anonymous Functions: Suport per a funcions anònimes i closures.

PHP 5.3 (2009)

  • Namespaces: Millorat el suport per a namespaces.
  • Funcions anònimes: Suport per a funcions anònimes.
  • Funcions de fitxer: Suport per a funcions de fitxer.

PHP 5.6 (2014)

  • Expressions constants: Suport per a expressions constants.
  • Desempaquetat d’arguments: Suport per a desempaquetar arguments en les funcions.

PHP 7.0 (2015)

  • Tipus escalars: Declaracions de tipus escalars.
  • Rendiment: Major millora de rendiment, podent manejar el doble de sol·licituds per segon.
  • Tipus de retorn: Declaracions de tipus de retorn.

PHP 7.4 (2019)

  • Propietats tipades: Suport per a propietats tipades.
  • Separador numèric sota línies: Introducció del sota línies com a separatòr numèric.

PHP 8.0 (2020)

  • Tipus de unió: Suport per a tipus de unió.
  • JIT (Just-In-Time): Compilador JIT per millorar el rendiment.
  • Propietats de constructors: Promoció de propietats de constructors.

PHP 8.1 (2021)

  • Enums: Suport per a enums.
  • Fibres: Suport per a fibres.
  • Tipus d’intersecció: Suport per a tipus d’intersecció.

PHP 8.2 (2022)

  • Classes de nomès lectura: Suport per a classes de només lectura.
  • DNF tipus: Suport per a DNF tipus.
  • Tipus per a null, fals i cert: Suport per a tipus específics per a null, fals i cert.

PHP 8.3 (2023)

  • Propietats redactades: Suport per a redacció de propietats sensitives.
  • Extensió aleatòria: Nova extensió aleatòria.

PHP 8.4 (2024)

  • Propietats de només lectura: Suport per a propietats de només lectura.
  • Millorat el rendiment: Continuació de millores de rendiment.

PHP ha evolucionat molt des de la seva primera versió, convertint-se en una eina poderosa i versàtil per a la desenvolupament web. La comunitat PHP també ha jugat un paper important en aquesta evolució, oferint suport i innovació contínua.


*PHP (Hypertext Preprocessor) va ser creat l’any 1995 per Rasmus Lerdorf. Originalment, es va desenvolupar com a eina per gestionar el seu currículum en línia, però amb el temps va evolucionar fins a convertir-se en el llenguatge de programació web que coneixem avui.

Hi ha alguna altra cosa sobre PHP que t’agradaria saber?


El popular lloc de xarxes socials va ser inicialment desenvolupat en PHP actualment quin llenguate utilitza?

Facebook, inicialment desenvolupat en PHP, ha evolucionat significativament i ara utilitza una combinació de llenguatges per a diferents parts de la seva plataforma. Els llenguatges més utilitzats actualment a Facebook inclouen:

  • Hack: Una extensió de PHP que ofereix tipus estàtics i millors eines de desenvolupament.
  • Python: Utilitzat per tasques de processament de dades i aprenentatge automàtic.
  • Java: Utilitzat per a aplicacions empresarials i serveis backend.
  • C++: Utilitzat per a parts crítiques de rendiment.
  • Erlang: Utilitzat per a serveis de xarxa i comunicacions.
  • JavaScript: Utilitzat per a la interfície d’usuari i aplicacions web dinàmiques.

Aquesta diversitat de llenguatges permet a Facebook mantenir una plataforma robusta, escalable i eficient.

Python s’utilitza a Facebook per a diverses tasques clau. Aquí tens algunes de les aplicacions principals de Python en la infraestructura de Facebook:

  1. Processament de Dades:
  • Facebook recull enormes quantitats de dades dels usuaris, i Python s’utilitza àmpliament per processar, analitzar i extreure informació útil d’aquestes dades.
  • Llibreries com Pandas, NumPy i SciPy són utilitzades per a l’anàlisi de dades i el càlcul científic.
  1. Aprenentatge Automàtic (Machine Learning):
  • Python és molt popular en el camp de l’aprenentatge automàtic gràcies a les seves potents llibreries com TensorFlow, PyTorch i scikit-learn.
  • Facebook utilitza Python per desenvolupar i desplegar models d’aprenentatge automàtic que milloren l’experiència de l’usuari, com ara recomanacions personalitzades i detecció de contingut inadequat.
  1. Infraestructura de Serveis:
  • Python s’utilitza per escriure microserveis i altres components de backend que ajuden a gestionar i mantenir la infraestructura de la plataforma.
  • Frameworks com Flask i Django poden ser utilitzats per desenvolupar aquests serveis.
  1. Automatització i Scripts:
  • Python és ideal per a tasques d’automatització, com la gestió de servidors, la distribució de recursos i el desplegament de codi.
  • Scripts de Python s’utilitzen per automatitzar tasques rutinàries i millorar l’eficiència dels desenvolupadors.
  1. Anàlisi de Xarxes Socials:
  • Python permet analitzar patrons de comportament i interacció entre usuaris a Facebook, utilitzant llibreries com NetworkX per a l’anàlisi de xarxes.

Aquestes són algunes de les formes principals en què Python s’aplica a Facebook. La seva flexibilitat i potència fan que sigui una eina valuosa en molts aspectes del desenvolupament i manteniment de la plataforma.

Si tens alguna altra pregunta o necessites més informació, estic aquí per ajudar-te! 😊

Publicat dins de PHP

PHP MySQL copiant dades d’una taula a una altra

[php]
<?php
// Aquest script carrega la taula 9000_CAMPS a la taula words les dos taules son de polidic_eng
// 9000_CAMPS -> ENGLISH_POLIDIC.words
// ES FA LA CONNEXIÓ
$conn= mysqli_connect("localhost", "miquel", "Beseit1968!","polidic_eng");// fa la conexió
if (!$conn) { echo "Error: No s’ha pogut connectar a:". DB_NAME ;}
else{echo "Connected successfully";}
$SQL="TRUNCATE TABLE words"; //buida la taula
mysqli_query($conn, $SQL);
$sql="INSERT INTO words (tipus, catala, castella, pron) SELECT * FROM 9000_CAMPS";
mysqli_query($conn, $sql);
echo "fet";
?>
[/php]