Posunutí verze PHP na 8.4 v Docker kontejneru pro Virtuální azyl

Posunutí verze PHP na 8.4 v Docker kontejneru pro Virtuální azyl

V rámci neustálého vylepšování platformy virtualniazyl.cz jsem se rozhodl posunout verzi PHP na 8.4 v našem Docker kontejneru. Tento krok přináší několik vylepšení, která zjednodušují vývoj i optimalizaci aplikace. PHP 8.4 přináší nové možnosti, včetně vylepšení výkonu a nových jazykových funkcí, které jsou pro moderní aplikace klíčové.

Jedním z největších benefitů pro vývojáře je zrychlení aplikací díky vylepšením v runtime, ale také přidání nových nástrojů pro optimalizaci kódu. Osobně se těším i na nadcházející verzi PHP 8.5, která slibuje další inovace, jako například podporu nových syntaxí a nových možností pro efektivní práci s objekty a třídami.

Pokud se podíváme na širší kontext, tak se v rámci tohoto posunu zaměřujeme také na optimalizace, které využívají vlastnosti frameworku Nette. V nedávno vydaném článku na blogu Nette se popisuje, jak jedna řádka v konfiguraci může výrazně zrychlit vaši Nette aplikaci. Tato změna souvisí s tím, jak Nette dokáže inteligentně optimalizovat způsob, jakým pracuje s požadavky a jakým způsobem jsou zpracovávány jednotlivé požadavky na server.

V článku se například uvádí, že díky nové vlastnosti frameworku, která zjednodušuje cachování a zrychluje práci s routováním, je možné ušetřit i několik milisekund na každém požadavku. Tato optimalizace se hodí zejména pro projekty, kde je důležité dosahovat vysokého výkonu a nízké latence.

Pro více informací o této optimalizaci si můžete přečíst celý článek na blogu Nette, kde se dozvíte, jak tuto novou vlastnost využít.

S těmito změnami, jak v PHP, tak v Nette, se těším na to, co přinese PHP 8.5 a jaké nové možnosti pro zrychlení a zjednodušení vývoje nám přinese.

Budu samozřejmě kontejner nějakou dobu testovat než ho nasadím na zatím běžící testovací verzi.

Srovnání PHP 7, PHP 8 a podrobný pohled na PHP 8.1, 8.3 a 8.4

Srovnání PHP 7, PHP 8 a podrobný pohled na PHP 8.1, 8.3 a 8.4

PHP je jedním z nejpoužívanějších jazyků pro vývoj webových aplikací. V průběhu let prošlo zásadními změnami, které dramaticky zlepšily výkon, bezpečnost a vývojářský komfort. Tento článek se zaměřuje na srovnání PHP 7 a PHP 8 a detailně analyzuje klíčové změny v PHP 8.1, 8.3 a PHP 8.4, přičemž se podíváme i na plánované novinky ve verzi PHP 8.5.


PHP 7: Revoluce ve výkonu

PHP 7 bylo vydáno v prosinci 2015 a přineslo obrovský skok v oblasti výkonu. Díky novému Zend Engine (nazývanému také PHPNG – PHP Next Generation) došlo k:

  • Zdvojnásobení rychlosti zpracování většiny aplikací.
  • Snížení spotřeby paměti, což umožnilo větší škálovatelnost aplikací.

Novinky v PHP 7:

  1. Skalární typy: function addNumbers(int $a, int $b): int { return $a + $b; } echo addNumbers(5, 10); // 15
  2. Operátor nulového sloučení: $username = $_GET['user'] ?? 'Guest';
  3. Anonymní třídy: $obj = new class { public function sayHello() { return "Hello, World!"; } }; echo $obj->sayHello();

PHP 8: Moderní přístup

Vydání PHP 8 v listopadu 2020 přineslo další revoluci. PHP se stalo moderním jazykem, který kombinuje rychlost, bezpečnost a snadnou použitelnost.

Klíčové novinky v PHP 8:

  1. Just-In-Time (JIT) kompilace: JIT umožňuje překlad často používaného kódu do strojového kódu, což dramaticky zvyšuje výkon v některých scénářích, například u numerických výpočtů.
  2. Atributy (annotations): #[Route("/api", methods: ["GET"])] class ApiController { // ... }
  3. Match výraz: $result = match ($status) { 200 => 'OK', 404 => 'Not Found', default => 'Unknown status', };
  4. Bezpečnost a typování: Zavedla se přísnější kontrola typů, díky čemuž je kód spolehlivější.

Srovnání výkonu PHP 7 vs PHP 8

Jedním z klíčových faktorů přechodu na PHP 8 je jeho vyšší výkon. Příklad ukazuje rozdíl v rychlosti zpracování velkého počtu iterací:

PHP 7:

$start = microtime(true);
for ($i = 0; $i < 1000000; $i++) {
    $result = sqrt($i);
}
$time = microtime(true) - $start;
echo "PHP 7 runtime: $time seconds";

PHP 8:

$start = microtime(true);
for ($i = 0; $i < 1000000; $i++) {
    $result = sqrt($i);
}
$time = microtime(true) - $start;
echo "PHP 8 runtime: $time seconds";

Výsledky ukazují, že PHP 8 je přibližně o 30 % rychlejší díky optimalizacím v JIT.


PHP 8.1: Dokonalejší nástroje pro vývojáře

PHP 8.1, vydané v listopadu 2021, přineslo řadu funkcí, které usnadňují práci vývojářům.

Hlavní novinky v PHP 8.1:

  1. Enumerace (Enums): enum Status: string { case Draft = 'draft'; case Published = 'published'; case Archived = 'archived'; }
  2. Asynchronní funkce (Fibers): Fibers přinášejí možnost pracovat s kooperativními vlákny. $fiber = new Fiber(function (): void { echo "Fiber started\n"; Fiber::suspend(); echo "Fiber resumed\n"; }); $fiber->start(); echo "Main script\n"; $fiber->resume();
  3. Read-only vlastnosti: class User { public readonly string $name; public function __construct(string $name) { $this->name = $name; } }

PHP 8.3: Drobné, ale užitečné zlepšení

PHP 8.3, vydané v listopadu 2023, se zaměřilo na vylepšení použitelnosti a nové nástroje.

Nejzajímavější novinky:

  1. Zapisování pouze při neexistenci: $array['key'] ??= 'default';
  2. JSON_VALIDATE: Nový příznak pro validaci JSON dat bez jejich dekódování. $isValid = json_decode($json, flags: JSON_VALIDATE) !== null;
  3. Zlepšení typových kontrol: PHP 8.3 přineslo přísnější kontrolu přetypování.

PHP 8.4: Poslední novinky

PHP 8.4, vydané v listopadu 2024, přineslo:

  1. Vylepšení JIT: Další optimalizace výkonu u složitých výpočtů.
  2. Nové syntaktické konstrukty: Přidána podpora pro snadnější manipulaci s datovými strukturami.
  3. Zlepšení práce s paralelním kódem: Dále rozšířená podpora Fibers.

Co přinese PHP 8.5?

Plánované vydání PHP 8.5 se zaměří na:

  1. Podporu vícevláknových operací.
  2. Zlepšení práce s asynchronním kódem.
  3. Další optimalizace výkonu a typových kontrol.

Výkonové testy

Podle měření společnosti Kinsta vykazuje PHP 8 ve většině aplikací (např. WordPress) o 50-70 % lepší výkon než PHP 7. PHP 8.1 přidává dalších 5-10 % díky optimalizacím JIT a dalším změnám.

Například WordPress zpracovává průměrně 90 požadavků za sekundu na PHP 7, zatímco na PHP 8.1 je to 140 požadavků za sekundu. Více informací naleznete v testech Kinsta.


Shrnutí

PHP 7 znamenalo zásadní přelom v oblasti výkonu a moderních funkcí. PHP 8 a jeho následné verze přinesly další nástroje pro vývojáře, zlepšení bezpečnosti a výkonu. Díky těmto změnám se PHP stále drží na špičce mezi jazyky pro vývoj webových aplikací.


Ukázky kódu v článku ukazují, jak nové funkce usnadňují práci a činí kód robustnějším. Pokud stále používáte PHP 7, je nejvyšší čas na upgrade na PHP 8.4 nebo brzy na PHP 8.5.

Vytvoření PHP skriptu pro generování popisků produktů pomocí ChatGPT

Vytvoření PHP skriptu pro generování popisků produktů pomocí ChatGPT

V tomto článku si ukážeme, jak vytvořit PHP skript, který bude využívat OpenAI API k automatickému generování popisků produktů. Skript dostane jako vstup ID produktu, jeho název a URL fotografie ve formátu JSON. ChatGPT vrátí výsledek obsahující popis produktu, kategorii a ID kategorie z předem definovaného seznamu.


Cíl

Cílem je vytvořit PHP skript, který:

  • Odešle vstupní data (ID, název, URL fotografie produktu) do OpenAI API.
  • Získá popis produktu a určí jeho kategorii.
  • Vrátí ID produktu, popis, kategorii a ID kategorie.

Příprava

Než začneme, ujistěte se, že máte:

  1. API klíč OpenAI – Získejte jej z platformy OpenAI.
  2. PHP prostředí – Měli byste mít nainstalované PHP (verze 7.4 nebo novější) s podporou cURL.
  3. Composer – Nástroj pro správu PHP knihoven.

Krok 1: Instalace OpenAI PHP knihovny

Nainstalujte knihovnu pro práci s OpenAI API pomocí Composeru:

composer require openai-php/client

Krok 2: Struktura projektu

Vytvořte si projektovou strukturu:

project/
├── src/
│   ├── categories.php
│   └── generateDescription.php
├── composer.json
└── index.php

Krok 3: Definice kategorií

V souboru src/categories.php nadefinujte seznam kategorií jako asociativní pole:

<?php
return [
    1 => 'Electronics',
    2 => 'Home & Kitchen',
    3 => 'Books',
    4 => 'Toys & Games',
    5 => 'Clothing',
    // Další kategorie podle potřeby
];

Krok 4: Skript pro generování popisků

Vytvořte soubor src/generateDescription.php s funkcí pro volání OpenAI API:

<?php

require_once __DIR__ . '/../vendor/autoload.php';
use OpenAI\Client;

function generateProductDescription($product, $apiKey)
{
    $client = Client::factory([
        'api_key' => $apiKey,
    ]);

    $categories = require __DIR__ . '/categories.php';

    $prompt = "You are an AI assistant. Given the following product details, generate a description and assign a category ID from the predefined list in czech:\n\n" .
        "Product ID: {$product['id']}\n" .
        "Product Name: {$product['name']}\n" .
        "Image URL: {$product['image']}\n\n" .
        "Categories:\n" . implode("\n", array_map(fn($id, $name) => "$id: $name", array_keys($categories), $categories)) .
        "\n\nRespond in JSON format with 'id', 'description', and 'category_id'.";

    $response = $client->chat()->create([
        'model' => 'gpt-4', // Nebo 'gpt-3.5-turbo'
        'messages' => [
            ['role' => 'system', 'content' => 'You are a helpful assistant.'],
            ['role' => 'user', 'content' => $prompt],
        ],
    ]);

    return json_decode($response['choices'][0]['message']['content'], true);
}

Krok 5: Hlavní skript

Vytvořte index.php jako vstupní bod aplikace:

<?php

require_once __DIR__ . '/vendor/autoload.php';
require_once __DIR__ . '/src/generateDescription.php';

$apiKey = 'tvůj_openai_api_klíč'; // Nahraď vlastním klíčem

$product = [
    'id' => 101,
    'name' => 'Smartphone XYZ',
    'image' => 'https://example.com/images/smartphone_xyz.jpg',
];

$result = generateProductDescription($product, $apiKey);

echo "<pre>";
print_r($result);
echo "</pre>";

Krok 6: Testování

  1. Spusťte PHP server: php -S localhost:8000
  2. Otevřete prohlížeč a navštivte http://localhost:8000/.
  3. Skript vrátí data ve formátu: { "id": 101, "description": "This is a high-quality smartphone with a sleek design...", "category_id": 1 }

Závěr

Tento skript demonstruje, jak snadno lze využít OpenAI API k automatizaci generování obsahu. Pokud chcete skript rozšířit, můžete přidat uložení výsledků do databáze nebo zpracování více produktů najednou.

Neváhejte mě kontaktovat, pokud byste potřebovali další rady nebo pomoc s implementací!

Novinky v Nette: Vylepšená funkcionalita, dokumentace a budoucnost s PHP 8.5

Novinky v Nette: Vylepšená funkcionalita, dokumentace a budoucnost s PHP 8.5

Nette, jeden z nejpopulárnějších PHP frameworků, přichází s řadou vylepšení, která posouvají hranice jeho možností. Tato nová verze nejen zrychluje běh aplikací díky chytrým optimalizacím, jako je lazy nahrávání objektů, ale také přináší významné zlepšení dokumentace, což usnadňuje vývojářům práci a zvyšuje přístupnost frameworku. Podívejme se podrobněji na tyto změny a zamysleme se nad tím, co nás čeká v budoucí verzi PHP 8.5.

Lazy nahrávání objektů: Zrychlení, které ocení každý vývojář

Jednou z nejvýznamnějších novinek v Nette je zavedení tzv. lazy nahrávání objektů (lazy loading). Tento koncept umožňuje frameworku načítat objekty pouze v okamžiku, kdy jsou skutečně potřeba. Výsledkem je výrazné snížení nároků na paměť a zrychlení celé aplikace.

Například, pokud vaše aplikace pracuje s databází a potřebuje načíst data z několika tabulek, Nette nyní dokáže odložit načtení těchto dat, dokud se s nimi nezačne přímo pracovat. To znamená, že se výrazně snižuje počet SQL dotazů prováděných při každém požadavku.

Jednoduché zapnutí v konfiguraci

Jedním z nejlepších aspektů této novinky je její jednoduchá implementace. Stačí přidat jediný řádek do konfigurace:

nette:
    database:
        lazy: true

Tato změna umožňuje vývojářům snadno přejít na nový systém bez nutnosti složitého přepisování aplikace. Více informací naleznete v článku „Jedna řádka v konfiguraci zrychlí vaši Nette aplikaci“.

Výsledky v praxi

Testy ukazují, že aplikace využívající lazy nahrávání mohou dosáhnout až o 40 % lepšího výkonu v závislosti na povaze aplikace a množství dat, se kterými pracuje. Tato optimalizace je proto vhodná zejména pro projekty s velkými databázemi nebo složitými dotazy.

Nová dokumentace: Snadnější přístup pro všechny

Nette je známé svou kvalitní dokumentací, která je přístupná jak začátečníkům, tak zkušeným vývojářům. S posledními změnami v dokumentaci databázového modulu však tento standard posunulo na zcela novou úroveň.

Nový průvodce pro práci s databází, dostupný na dokumentační stránce, je navržen tak, aby pomohl vývojářům snadno pochopit klíčové koncepty a efektivně využívat všechny funkce databázového modulu.

Hlavní vylepšení v dokumentaci

  1. Lepší struktura: Dokumentace je nyní logicky rozčleněna do menších sekcí, což umožňuje snadnější orientaci. Můžete rychle přejít k částem věnovaným konkrétním funkcím, jako je Explorer nebo práci s transakcemi.
  2. Praktické příklady: Každá sekce obsahuje ukázky kódu, které lze okamžitě použít v praxi. Například následující příklad ukazuje, jak snadno vytvořit dotaz pomocí Exploreru:
$rows = $explorer->table('users')->where('age > ?', 18);
foreach ($rows as $row) {
    echo $row->name;
}
  1. Propojení s blogovými články: Dokumentace obsahuje odkazy na související blogové články, například „Nette Database dokumentace, která posouvá hranice“. Tyto články poskytují hlubší vhled do jednotlivých funkcí a jejich využití v reálných scénářích.
  2. Interaktivní příklady: Některé části dokumentace obsahují interaktivní prvky, které umožňují vývojářům vyzkoušet si kód přímo v prohlížeči.

Proč je nová dokumentace důležitá

Dobrá dokumentace šetří čas a eliminuje zbytečné chyby. Nové vylepšení v dokumentaci Nette zajišťuje, že i složité koncepty, jako je práce s Explorerem, jsou snadno pochopitelné a aplikovatelné.

Budoucnost s PHP 8.5

Nette vždy rychle přijímá novinky z nových verzí PHP a verze 8.5 nebude výjimkou. Co můžeme očekávat od této nadcházející verze PHP?

Možné novinky v PHP 8.5

  1. Vylepšení výkonu: S každou novou verzí PHP přicházejí optimalizace v jádře, které zrychlují běh aplikací. V kombinaci s lazy loadingem v Nette mohou tyto změny dále snížit latenci a zlepšit uživatelskou zkušenost.
  2. Nové jazykové konstrukce: PHP 8.5 by mohlo přinést nové syntaxe nebo konstrukce, které zjednoduší zápis kódu. Například další vylepšení pro práci s typovou kontrolou nebo rozšíření funkcionality match.
  3. Bezpečnostní vylepšení: Bezpečnost je vždy prioritou. PHP 8.5 pravděpodobně přinese lepší ochranu proti běžným hrozbám, jako jsou útoky typu SQL injection nebo XSS.
  4. Podpora pro moderní vývojové nástroje: S rostoucí popularitou Dockeru a CI/CD pipeline můžeme očekávat zlepšení integrace s těmito nástroji, což usnadní nasazování a správu aplikací.

Jak se na to připravit?

Vývojáři by měli sledovat oficiální kanály PHP a Nette, aby zůstali informováni o novinkách. Doporučuje se také pravidelně aktualizovat své aplikace a testovat je na nových verzích PHP.

Jak to bude dál?

Novinky v Nette, jako je lazy nahrávání objektů a vylepšená dokumentace, představují významný krok vpřed pro tento framework. Tyto změny nejen zrychlují vývoj, ale také zlepšují přístupnost a usnadňují práci vývojářům. Budoucnost s PHP 8.5 slibuje další zlepšení, která posunou hranice toho, co lze v PHP dosáhnout.

Sledujte oficiální blog Nette a PHP, abyste zůstali v obraze, a neváhejte implementovat nové funkce, které vám mohou ušetřit čas a zdroje. Nette opět dokazuje, proč je jedním z nejlepších nástrojů pro moderní webový vývoj.

Jak vytvořit REST API v PHP 8.3

Jak vytvořit REST API v PHP 8.3

V tomto článku si ukážeme, jak vytvořit jednoduché REST API v PHP 8.3, které umožní provádět CRUD operace (Create, Read, Update, Delete) nad seznamem položek. Použijeme čistý PHP kód bez frameworků, abychom co nejvíce pochopili, jak REST API funguje.

1. Nastavení projektu

  1. Vytvořte složku pro projekt: mkdir php-rest-api cd php-rest-api
  2. Vytvořte soubor index.php, který bude sloužit jako vstupní bod API.

2. Datová struktura

Pro jednoduchost budeme data uchovávat v souboru data.json. Tento soubor bude obsahovat seznam položek ve formátu JSON.

data.json:

[
    {"id": 1, "name": "Položka 1", "description": "Popis položky 1"},
    {"id": 2, "name": "Položka 2", "description": "Popis položky 2"}
]

3. Implementace REST API

Otevřete soubor index.php a napište následující kód.

<?php

header("Content-Type: application/json");

// Načítání dat ze souboru
function loadData(): array {
    $data = file_get_contents('data.json');
    return json_decode($data, true);
}

// Ukládání dat do souboru
function saveData(array $data): void {
    file_put_contents('data.json', json_encode($data, JSON_PRETTY_PRINT));
}

// Zjištění HTTP metody a cesty
$method = $_SERVER['REQUEST_METHOD'];
$path = trim($_SERVER['PATH_INFO'] ?? '/', '/');

// Rozdělení cesty na segmenty
$segments = explode('/', $path);

$data = loadData();

// Funkce pro odpovědi
function respond($status, $response) {
    http_response_code($status);
    echo json_encode($response);
    exit;
}

// Route handling
if ($segments[0] === 'items') {
    // GET /items - seznam položek
    if ($method === 'GET' && count($segments) === 1) {
        respond(200, $data);
    }

    // GET /items/{id} - detail položky
    if ($method === 'GET' && count($segments) === 2) {
        $id = (int) $segments[1];
        foreach ($data as $item) {
            if ($item['id'] === $id) {
                respond(200, $item);
            }
        }
        respond(404, ["message" => "Položka nenalezena"]);
    }

    // POST /items - vytvoření položky
    if ($method === 'POST' && count($segments) === 1) {
        $input = json_decode(file_get_contents('php://input'), true);
        if (!isset($input['name']) || !isset($input['description'])) {
            respond(400, ["message" => "Neplatná data"]);
        }

        $newItem = [
            "id" => end($data)['id'] + 1,
            "name" => $input['name'],
            "description" => $input['description']
        ];

        $data[] = $newItem;
        saveData($data);

        respond(201, $newItem);
    }

    // PUT /items/{id} - aktualizace položky
    if ($method === 'PUT' && count($segments) === 2) {
        $id = (int) $segments[1];
        $input = json_decode(file_get_contents('php://input'), true);

        foreach ($data as &$item) {
            if ($item['id'] === $id) {
                $item['name'] = $input['name'] ?? $item['name'];
                $item['description'] = $input['description'] ?? $item['description'];

                saveData($data);
                respond(200, $item);
            }
        }
        respond(404, ["message" => "Položka nenalezena"]);
    }

    // DELETE /items/{id} - smazání položky
    if ($method === 'DELETE' && count($segments) === 2) {
        $id = (int) $segments[1];
        foreach ($data as $index => $item) {
            if ($item['id'] === $id) {
                array_splice($data, $index, 1);
                saveData($data);
                respond(204, null);
            }
        }
        respond(404, ["message" => "Položka nenalezena"]);
    }
}

// Neznámá cesta
respond(404, ["message" => "Neplatná cesta"]);

4. Testování API

Můžete API testovat pomocí nástrojů jako Postman nebo curl:

  1. Získání seznamu položek: curl -X GET http://localhost/items
  2. Vytvoření položky: curl -X POST http://localhost/items -H "Content-Type: application/json" -d '{"name": "Položka 3", "description": "Popis položky 3"}'
  3. Aktualizace položky: curl -X PUT http://localhost/items/1 -H "Content-Type: application/json" -d '{"name": "Nová položka 1"}'
  4. Smazání položky: curl -X DELETE http://localhost/items/1

Závěr

Tento článek ukazuje základní principy REST API v PHP. Pro produkční nasazení by bylo vhodné použít framework (např. Laravel nebo Nette) a databázi pro ukladání dat.

Virtuální Azyl: Revoluce v adopci zvířat začíná

Beta verze spuštěna! (Hurá!!!) 😉

Rádi bychom vám představili náš nový projekt Virtuální Azyl, který vznikl s cílem propojit azylová centra, útulky a zájemce o adopci zvířat na jednom místě. Tento ambiciózní projekt přináší nový způsob, jak najít domov pro opuštěná zvířata a zároveň usnadnit adopční proces.

O projektu

Virtuální Azyl je platforma postavená na moderních technologiích, jako jsou PHP 8.3 (asi plná verze bude na 8.4), Nette framework, ORM Doctrine, Latte šablony a frontendové technologie Bootstrap a JQuery. Systém umožňuje:

  • Jednoduché vyhledávání zvířat k adopci.
  • Propojení jednotlivých útulků a azylů.
  • Vytváření profilů zájemců o adopci.
  • Transparentní a bezpečný proces komunikace.

Vývoj a současný stav

Projekt je aktuálně ve fázi beta verze, která je plně funkční, ale stále probíhá intenzivní vývoj. Spousta věcí se ještě tvoří, testuje a analyzuje. Každý den pracujeme na nových funkcionalitách, opravách chyb a optimalizaci systému. Mezi hlavní výzvy patří:

  • Vytváření efektivních a intuitivních funkcí.
  • Zajištění stability a bezpečnosti systému.
  • Testování s reálnými uživateli.

Budoucnost Virtuálního Azylu

Naší vizí je vytvořit platformu, která bude srozumitelná a dostupná jak útulkům, tak zájemcům o adopci. Pracujeme na implementaci dalších funkcí, jako je například zlepšené filtrování, správa adopčních procesů nebo integrace s dalšími systémy.

Pokud vás projekt zaujal, neváhejte nás kontaktovat nebo se zapojit do testování beta verze. Každá zpětná vazba nás posouvá blíže k cíli – spojit všechny útulky a azylová centra na jednom místě.

A na konec….

Virtuální Azyl není jen technický projekt; je to cesta, jak zlepšit život opuštěným zvířatům a propojit je s těmi, kteří jim chtějí dát nový domov. Děkujeme všem, kteří nám pomáhají na této cestě.

Vyzkoušejte beta verzi na beta.virtualniazyl.cz a dejte nám vědět, co si myslíte!

Procedurální vs. Objektově orientovaný přístup v PHP: Srovnání a Příklady

Procedurální vs. Objektově orientovaný přístup v PHP: Srovnání a Příklady

PHP je jazyk, který podporuje jak procedurální, tak objektově orientovaný přístup (OOP). Každý z těchto přístupů má své výhody a nevýhody a je vhodný pro různé typy projektů. Tento článek porovná oba přístupy a ukáže, jak se liší na praktických příkladech, včetně aplikace v různých frameworkách, jako je Nette.


Procedurální přístup

Procedurální programování je tradiční způsob psaní kódu, kde jsou programy strukturovány kolem funkcí a volání procedur.

Vlastnosti procedurálního přístupu

  • Jednoduchost: Kód je čtivý a snadno pochopitelný.
  • Přímá logika: Programování krok za krokem.
  • Vhodné pro menší projekty: Ideální pro jednoduché aplikace a skripty.

Příklad procedurálního kódu

Představme si jednoduchý příklad kalkulačky:

<?php
function add($a, $b) {
    return $a + $b;
}

function subtract($a, $b) {
    return $a - $b;
}

$result = add(10, 5);
echo "Součet: $result\n";

$result = subtract(10, 5);
echo "Rozdíl: $result\n";

Tento přístup je jednoduchý a intuitivní, ale s rostoucí složitostí projektu může být obtížně spravovatelný.


Objektově orientovaný přístup (OOP)

OOP strukturuje kód kolem objektů, které obsahují data (vlastnosti) a funkce (metody). Tento přístup podporuje opětovné využití kódu a lepší organizaci.

Vlastnosti OOP

  • Modularita: Kód je rozčleněn do tříd a objektů.
  • Opětovné použití: Objekty lze snadno opětovně použit v různých částech programu.
  • Lepší udržovatelnost: Jasná struktura a oddělení zodpovědnosti.

Příklad OOP kódu

Ukažme si stejný příklad kalkulačky v OOP:

<?php
class Calculator {
    public function add($a, $b) {
        return $a + $b;
    }

    public function subtract($a, $b) {
        return $a - $b;
    }
}

$calculator = new Calculator();

$result = $calculator->add(10, 5);
echo "Součet: $result\n";

$result = $calculator->subtract(10, 5);
echo "Rozdíl: $result\n";

Výkon a organizace jsou výrazně lepší, což usnadňuje práci na větších projektech.


Příklad použití: Nette Framework

Nette je typický příklad frameworku, který podporuje objektově orientovaný přístup. Struktura aplikace v Nette je založena na třídách, které reprezentují kontrolery, modely a komponenty.

Příklad OOP v Nette

Představme si jednoduchý formulář pro přidání uživatele:

<?php
class UserPresenter extends Nette\Application\UI\Presenter {
    public function createComponentUserForm() {
        $form = new Nette\Application\UI\Form();
        $form->addText('name', 'Jméno:')
             ->setRequired('Zadejte jméno.');

        $form->addSubmit('send', 'Odeslat');
        $form->onSuccess[] = [$this, 'userFormSucceeded'];

        return $form;
    }

    public function userFormSucceeded($form, $values) {
        // Logika při odeslání formuláře
        $this->flashMessage('Uživatel přidán.', 'success');
        $this->redirect('Homepage:default');
    }
}

Tento přístup je strukturovaný a podporuje opětovné použití komponent.


Příklad použití: Procedurální přístup v jednodušších projektech

Procedurální přístup lze použít například v menších skriptech nebo jednodušších aplikacích. Příkladem je jednoduchá aplikace pro zpracování formuláře:

<?php
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
    $name = $_POST['name'] ?? '';
    if ($name === '') {
        echo "Zadejte jméno.";
    } else {
        echo "Uživatel $name byl přidán.";
    }
}

I když je tento přístup jednodušší, rychle naráží na limity u složitějších aplikací.


Srovnání

AspektProcedurální přístupOOP
JednoduchostJednoduchý na naučení a použitíVyžaduje znalost tříd a objektů
ModularitaOmezenáVysoká
UdržovatelnostObtížnějšíSnadná
VhodnostMenší projektyStřední a velké projekty

Závěr

Procedurální přístup je vhodný pro jednodušší aplikace a skripty, zatímco OOP je ideální pro složitější projekty, kde je důležitá modularita a udržovatelnost. Frameworky jako Nette důkazně ukazují výhody OOP přístupu, zatímco procedurální přístup najde své využití v jednodušších kontextech. Správný výběr závisí na konkrétních potřebách projektu.

Srovnání PHP Frameworků (Nette, Symfony, Laravel, Zend….

Srovnání PHP Frameworků (Nette, Symfony, Laravel, Zend….

PHP je jednou z nejpopulárnějších technologií pro tvorbu webových aplikací. Pro usnadnění vývoje a zajištění konzistence kódu nabízí PHP mnoho různých frameworků. Mezi nejznámější patří Nette, Symfony, Laravel, CodeIgniter a Zend Framework (Laminas). Každý z těchto frameworků má své silné i slabé stránky a je vhodný pro jiný typ projektů. Tento článek poskytuje srovnání těchto frameworků a pomůže vám vybrat ten správný pro vaši aplikaci.


1. Nette Framework

Nette je populární český PHP framework, který je známý svým důrazem na bezpečnost a jednoduchost. Nabízí robustní architekturu a podporuje MVC (Model-View-Controller).

Klíčové vlastnosti:

  • Bezpečnost: Nette obsahuje široký set funkcí pro ochranu proti XSS, CSRF a SQL Injection.
  • Komponentové systémy: Umožňuje vývoj aplikací pomocí znovupoužitelných komponent.
  • Latte šablonovací systém: Moderní, rychlý a bezpečný systém pro tvorbu šablon.
  • Snadné nastavení: Vývojáři oceňují jednoduchou konfiguraci bez zbytečné složitosti.

Použití:

Nette je vhodné pro malé a středně velké projekty, které vyžadují rychlou iteraci. Je široce používáný v České republice a jeho komunita je velmi aktivní.

Slabé stránky:

  • Menší komunita ve srovnání s jinými frameworky jako Symfony nebo Laravel.
  • Méně dostupné zdroje pro začátečníky.

2. Symfony Framework

Symfony je jednou z nejrobustnějších a nejvíce modulárních platforem pro vývoj webových aplikací. Používá jej mnoho velkých společností a jeho komponenty jsou základem dalších frameworků, jako je Laravel.

Klíčové vlastnosti:

  • Flexibilita: Symfony nabízí velké množství komponent, které lze použít samostatně.
  • Vysoký výkon: Optimalizace pro velké projekty.
  • Bohatá dokumentace: Symfony má jednu z nejlepších dokumentací v PHP ekosystému.
  • Modulární architektura: Umožňuje snadnou rozšiřitelnost a upravitelnost.

Použití:

Symfony je ideální pro velké a komplexní projekty, kde je potřeba precizní kontrola nad strukturou aplikace.

Slabé stránky:

  • Vyšší učební křivka pro začátečníky.
  • Komplexní nastavení může být zpočátku zmatečné.

3. Laravel

Laravel je velmi populární framework, který klade důraz na jednoduchost a přístupnost. Je oblíbený mezi začátečníky i pokročilými vývojáři.

Klíčové vlastnosti:

  • Eloquent ORM: Snadné mapování objektů na databázové tabulky.
  • Blade šablonovací systém: Jednoduchý a intuitivní systém pro šablony.
  • Bohaté ekosystémy: Laravel nabízí vestavěné nástroje, jako je Laravel Forge a Nova.
  • Velká komunita: Široká komunita a mnoho dostupných návodů.

Použití:

Laravel je vhodný pro rychlý vývoj aplikací a je ideální pro startupy a menší projekty.

Slabé stránky:

  • Měnší flexibilita při složitějších aplikacích.
  • Méně přímá kontrola nad architekturou oproti Symfony.

4. CodeIgniter

CodeIgniter je lehký a rychlý framework, který je ideální pro menší aplikace.

Klíčové vlastnosti:

  • Jednoduchá instalace: Minimum konfigurace pro rychlý start.
  • Výkon: Velmi rychlý, protože nenáročný na zdroje.
  • Dobře dokumentovaný: Ideální pro začátečníky.

Použití:

Vhodné pro malé projekty a aplikace, kde je rychlost klíčová.

Slabé stránky:

  • Omezená flexibilita pro komplexní aplikace.
  • Menší komunita oproti Laravelu nebo Symfony.

5. Zend Framework (Laminas)

Zend Framework, nyní známý jako Laminas, je framework vhodný pro rozsáhlé podnikové aplikace.

Klíčové vlastnosti:

  • Enterprise orientace: Robustní a stabilní řešení pro velké společnosti.
  • Podpora standardů: Dodržování nejlepších praktik a standardů.
  • Modularita: Podobně jako Symfony, Laminas nabízí modulární přístup.

Použití:

Ideální pro velké podniky a aplikace, kde je důležitá stabilita a podpora.

Slabé stránky:

  • Vyšší učební křivka.
  • Méně přístupná komunita.

Závěr

Každý PHP framework má své vlastnosti a je vhodný pro jiné situace:

  • Nette: Skvělé pro rychlý vývoj bezpečných aplikací, zvláště v Českém prostředí.
  • Symfony: Ideální pro velké a komplexní projekty s důrazem na flexibilitu.
  • Laravel: Nejlepší pro začátečníky a rychlý vývoj startupových aplikací.
  • CodeIgniter: Perfektní pro malé a jednoduché aplikace.
  • Zend/Laminas: Robustní volba pro velké podnikové aplikace.

Při výběru frameworku je důležité zvážit požadavky projektu, dostupné zdroje a osobní preference vývojáře.

Co už víme o PHP 8.5

Co už víme o PHP 8.5

PHP 8.5, má plánované vydání 20. listopadu 2025, přináší několik novinek a změn, které ovlivní vývojáře pracující s tímto populárním skriptovacím jazykem.

Nové funkce v PHP 8.5

  • Funkce curl_multi_get_handles: Tato nová funkce v rozšíření cURL umožňuje získat seznam všech aktivních cURL handle v multi handle.To usnadňuje správu a ladění více současných cURL požadavků.
  • Konstanta PHP_BUILD_DATE: PHP 8.5 zavádí novou vestavěnou konstantu PHP_BUILD_DATE, která obsahuje datum a čas kompilace aktuální PHP verze. Tato informace může být užitečná pro diagnostiku a správu verzí v různých prostředích.

Odebrané funkce v PHP 8.5

  • Konstanty MHASH_*: Všechny konstanty začínající na MHASH_ byly v PHP 8.5 označeny jako zastaralé. Tyto konstanty byly spojeny s původním rozšířením mhash, které bylo již dříve nahrazeno modernějším rozšířením hash. Doporučuje se aktualizovat kód a přejít na nové funkce poskytované rozšířením hash pro zajištění kompatibility s budoucími verzemi PHP.

PHP 8.5 pokračuje v trendu zavádění užitečných funkcí a odstraňování zastaralých prvků, čímž zajišťuje moderní a efektivní prostředí pro vývoj webových aplikací.

Novinky v PHP 8.4

Novinky v PHP 8.4

Novinky v PHP 8.4: Co nám přináší nejnovější verze?

PHP 8.4 přichází s celou řadou vylepšení a nových funkcí, které zjednoduší práci vývojářům a zvyší výkon jejich aplikací. Pojďme se podívat na nejvýznamnější změny, které tato verze nabízí.


Zabezpečení a kryptografie

V oblasti kryptografie dochází k rozšíření podpory o algoritmy AEGIS-128L a AEGIS-256 v knihovně Sodium. Tyto algoritmy nabízejí větší flexibilitu při implementaci bezpečných řešení.


Práce s poli

PHP 8.4 zavádí nové funkce pro jednodušší manipulaci s poli:

  • array_find – Najde první prvek splňující podmínku.
  • array_find_key – Vrátí klíč prvku splňujícího podmínku.
  • array_any – Zjistí, zda alespoň jeden prvek pole splňuje danou podmínku.
  • array_all – Zkontroluje, zda všechny prvky pole splňují podmínku.

Práce s textem

Pro efektivnější práci s textem byly přidány tyto novinky:

  • grapheme_str_split – Rozdělí text na části podle grafémů, což je užitečné pro unicode texty.
  • mb_ucfirst a mb_lcfirst – Provádí změnu velkých a malých písmen u prvního znaku textu s podporou multibyte znaků.
  • mb_trim, mb_ltrim, mb_rtrim – Odstraňují mezery nebo jiné znaky z textu s podporou multibyte znaků.

Funkce pro zaokrouhlování

Funkce round() nyní podporuje nové režimy zaokrouhlování, což dává vývojářům větší kontrolu nad způsobem, jakým jsou čísla zaokrouhlována.


Vylepšení pro práci s daty a časem

PHP 8.4 přináší významná rozšíření třídy DateTime a DateTimeImmutable:

  • createFromTimestamp – Nový způsob, jak vytvořit instance těchto tříd z timestampu.
  • getMicrosecond a setMicrosecond – Metody pro získání a nastavení mikrosekund.

Curl: Podpora HTTP/3 a další zlepšení

Knihovna Curl přidává podporu pro HTTP/3 pomocí nových konstant CURL_HTTP_VERSION_3 a CURL_HTTP_VERSION_3ONLY. Dále byly přidány tyto novinky:

  • CURLOPT_PREREQFUNCTION a CURLOPT_DEBUGFUNCTION – Nové možnosti pro lépe definované a debugovací procesy.
  • CURLOPT_SERVER_RESPONSE_TIMEOUT – Nahrazuje původní CURLOPT_FTP_RESPONSE_TIMEOUT.
  • CURLOPT_TCP_KEEPCNT – Nastaví počet kontrol živých spojení TCP.

Další zajímavé novinky

  • phpinfo() nyní zobrazuje velikost integeru.
  • Nová funkce request_parse_body umožňuje jednodušší zpracování těla HTTP požadavků.
  • Funkce curl_version() podporuje zobrazení seznamu vlastností pomocí feature_list.
  • Nová rozhraní http_get_last_response_headers a http_clear_last_response_headers poskytují lepší kontrolu nad HTTP hlavičkami.

Upgrade PCRE2 a změny v regulárních výrazech

PHP 8.4 zahrnuje upgrade knihovny PCRE2, což zlepšuje podporu pro regulární výrazy a jejich výkon.


PHP 8.4 nabízí mnoho užitečných novinek, které stojí za vyzkoušení. Pokud chcete zůstat na špičce vývoje, neváhejte a přejděte na tuto verzi. S kompletním přehledem změn se můžete seznámit na PHP WATCH.