PHP 4.0-4.3 - k OOP
Tento kód by bylo možné rozjet na PHP verze 4.3 a novější. Zavedení interface a implementace tříd v tomto kódu nepředstavuje problém pro PHP verze 4.3, protože podpora pro tyto koncepty existovala již od PHP 4.0. Rozhraní (interfaces) a implementace interface byly zahrnuty ve specifikaci PHP 4.0, což umožňuje vytvářet rozhraní a implementovat je v třídách.
// PHP 5.0 -> interface Shape {
// public function getArea();
//
class Shape {
// Prázdný konstruktor - nelze použít abstract konstruktor
function Shape() {
}
}
// PHP 5.0 -> class Circle implements Shape {class Circle extends Shape {
private $radius;
function Circle($radius) {
$this->radius = $radius;
}
function getArea() {
return 3.14 * $this->radius * $this->radius;
}
}
// PHP 5.0 -> class Square implements Shape {
class Square extends Shape {
private $side; // PHP 5.0 nevyžaduje definici Square; v PHP 5.0 je třeba __construct a getarea function Square($side) {
$this->side = $side;
}
function getArea() {
return $this->side * $this->side;
}
}$shapes = array(new Circle(5), new Square(4));
foreach ($shapes as $shape) {
echo "Plocha: " . $shape->getArea() . " jednotek čtverečních<br>";
} V tomto kódu se místo interface používá třídaShapepro společný základ obou třídCircleaSquare. Toto je starší způsob, jak vytvářet podobné struktury. Funkcionalita by měla být podobná, ale syntaxe se liší od modernějšího přístupu s rozhraním.
PHP 4.0
Zavedení funkce array_map pro aplikování funkce na elementy pole. Funkce array_map v PHP slouží k aplikaci zadané funkce na každý prvek pole a vytvoření nového pole s výsledky těchto funkcí. Můžete tímto způsobem provést transformaci, úpravy nebo aplikovat jiné operace na každý prvek pole..Syntaxe
array_map(callback $callback, array $array1, array ...$arrays): array
$callbackje funkce, která bude aplikována na každý prvek pole.$array1je pole, které chcete zpracovat.$arraysjsou další pole, pokud chcete provádět operace na více typech polí současně.
Funkce array_map projde každý prvek pole (nebo příslušných prvků v případě více polí) a použije na něj zadanou funkci $callback. Výsledky těchto volání jsou shromážděny do nového pole, které je následně vráceno jako výstup.
Příklad:
function square($n) {
return $n * $n;
}
$numbers = [1, 2, 3, 4, 5];
$squaredNumbers = array_map("square", $numbers);
print_r($squaredNumbers);
Výstup:
Array
(
[] => 1
[] => 4
[] => 9
[] => 16
[] => 25
)
V tomto příkladu jsme definovali funkci square, která vynásobí číslo samo se sebou. Poté jsme použili array_map pro aplikaci této funkce na každý prvek pole $numbers, čímž jsme získali pole s druhými mocninami těchto čísel.
Tady jsou některá vylepšení a novinky, které byly přidány v rámci verzí PHP od 4.4 do 4.8:PHP 4.4
- Přidání funkcí pro podporu práce s 64bitovými čísly (
intval(),floatval()atd.). - Vylepšení detekce kódování souborů pomocí funkce
mb_detect_encoding(). - Přidání globálního pole
$_ENVpro přístup k prostředí. - Přidání možnosti vypínat a zapínat globální proměnné pomocí
php.ini. - Přidání podpory pro nové vestavěné funkce jako
memory_get_usage()aget_declared_classes().
PHP 4.5
- Přidání podpory pro magic_quotes_gpc vytvořením funkce
get_magic_quotes_gpc(). - Přidání funkce
date_sunrise()adate_sunset()pro výpočet času východu a západu slunce. - Vylepšení výkonu pro víceúčelové řádkové komentáře.
PHP 4.6
- Přidání funkce
imagecreatefrompng()pro práci s PNG obrázky. - Přidání funkce
array_diff_key()pro porovnávání polí na základě klíčů. - Zavedení direktivy
zend.ze1_compatibility_modepro lepší kompatibilitu se starším kódem.
PHP 4.7
- Přidání možnosti nastavení typu obsahu (MIME type) při odesílání emailu funkcí
mail(). - Přidání funkce
http_build_str()pro tvorbu HTTP dotazu jako řetězce. - Zavedení podpory pro 64bitové systémy s funkcemi pro práci s velkými čísly.
PHP 4.8
- Přidání rozšíření
mysqlipro lepší podporu MySQL databází. - Přidání funkcí pro práci s datovými strukturami JSON pomocí rozšíření
json. - Vylepšení podpory pro 64bitové systémy pro zvýšení výkonu a stabilitu.
- Přidání rozšíření
sessionpro ukládání stavu mezi HTTP požadavky.
memory_get_usage: Tato funkce slouží k získání aktuálního využití paměti skriptem. Nemusí být povolena nebo zakázána na serveru, protože toto nastavení ovlivňuje pouze dostupnost informace o paměťovém využití skriptu, nikoliv jeho funkčnost.
Magic Quotes: Magic Quotes byla funkce v PHP, která automaticky zpětně lomila speciální znaky v uživatelském vstupu, což mohlo mít za následek nežádoucí efekty v databázi nebo při zobrazení dat. get_magic_quotes_gpc() byla funkce, která indikovala, zda jsou tyto magic quotes aktivní v superglobálních proměnných jako $_GET, $_POST, $_REQUEST, $_COOKIE a $_SERVER. Pokud byly aktivní, funkce mohla být použita k odstranění zpětných lomítek.
date_sunrise() a date_sunset(): Tyto funkce slouží k výpočtu času východu a západu slunce pro daný den na základě zadaných souřadnic. Můžeš specifikovat koordináty (zeměpisnou šířku a délku), datum a časovou zónu, a funkce ti vrátí čas východu nebo západu slunce. Výsledek je závislý na zeměpisné šířce, délce a datu, nikoliv na nastavení locale.
array_diff_key: Ano, funkce array_diff_key() slouží k porovnání klíčů v polích a nalezení rozdílů mezi nimi. Například, když máš dvě pole a chceš najít rozdíly ve klíčích mezi nimi, můžeš použít tuto funkci. Výsledek bude obsahovat klíče, které jsou pouze v jednom z polí.
Příklad k PHP 4.7 a http_build_str():
php
$queryData = array(
'name' => 'John',
'age' => 30,
'city' => 'New York'
);
$queryString = http_build_str($queryData);
// Vytvoří řetězec 'name=John&age=30&city=New%20York'
Příklad nových funkcí pro práci s velkými čísly:
php
$bigNumber1 = gmp_init('1234567890123456789012345678901234567890');
$bigNumber2 = gmp_init('9876543210987654321098765432109876543210');
$sum = gmp_add($bigNumber1, $bigNumber2);
// $sum bude obsahovat součet velkých čísel
Rozšíření session: Toto rozšíření zahrnuje funkce pro efektivnější a bezpečnější práci se sessions. Můžeš ukládat proměnné mezi jednotlivými HTTP požadavky uživatele bez nutnosti používat cookies. Tím lze například uchovávat informace o uživateli, jako je jeho stav přihlášení, obsah nákupního košíku apod., aniž by bylo nutné záviset na cookies.
Mělo by to být http_build_query() místo http_build_str(). Tady je korektní příklad a vysvětlení:
$queryData = array(
'name' => 'John',
'age' => 30,
'city' => 'New York'
);
$queryString = http_build_query($queryData);
// Vytvoří řetězec 'name=John&age=30&city=New%20York'
http_build_query() slouží k převedení asociativního pole (např. data z formuláře) na URL kódovaný řetězec, který se často používá jako součást URL parametrů v HTTP požadavcích. Tento proces je užitečný zejména při tvorbě odkazů s parametry nebo při odesílání dat metodou GET.
V tomto příkladu by měl výstup $queryString vypadat následovně:
name=John&age=30&city=New%20York
Tento řetězec by mohl být použit například v odkazu nebo v HTTP požadavku, aby byla zachována struktura a hodnoty z původního pole ve formátu vhodném pro použití v URL.
PHP 4.9 nebyla vydána, alespoň podle oficiálního seznamu verzí PHP. Vylepšení a novinky se tedy konkrétně vážou k verzím PHP 5.0 a vyšším.
PHP 5.0 (červen 2004):
- Zavedení objektově orientovaného programování (OOP) s kompletním přepracováním tříd, dědičnosti, polymorfismu a dalších prvků OOP.
PHP 5.1 (listopad 2005):
- Zavedení podpory pro PHP Data Objects (PDO) pro práci s databázemi.
- Zavedení interfejsů a abstraktních tříd.
zde jsou příklady vytvoření abstraktní třídy, její implementace a využití:
- Vytvoření abstraktní třídy:
abstract class Shape {
abstract public function getArea();
}
class Circle extends Shape {
private $radius;
public function __construct($radius) {
$this->radius = $radius;
}
public function getArea() {
return 3.14 * $this->radius * $this->radius;
}
}
class Square extends Shape {
private $side;
public function __construct($side) {
$this->side = $side;
}
public function getArea() {
return $this->side * $this->side;
}
}
- Využití abstraktní třídy:
$circle = new Circle(5);
$square = new Square(4);
echo "Plocha kruhu: " . $circle->getArea() . " jednotek čtverečních<br>";
echo "Plocha čtverce: " . $square->getArea() . " jednotek čtverečních";
V tomto příkladu je abstraktní třída Shape, která definuje abstraktní metodu getArea(). Tato metoda je implementována v odvozených třídách Circle a Square, které jsou od abstraktní třídy odvozeny. Tímto způsobem můžete vytvářet hierarchie tříd, které sdílejí společné vlastnosti a chování definované v abstraktní třídě.
PHP 5.2 (listopad 2006)
- Přidání rozšíření filter pro filtrace a validaci vstupních dat.
- Zavedení funkce json_encode() pro práci s JSON formátem.
- Rozšíření filter pro filtrace a validaci vstupních dat:
$input = "user@example.com";
$filteredInput = filter_var($input, FILTER_VALIDATE_EMAIL);
if ($filteredInput !== false) {
echo "Email je platný.";
} else {
echo "Neplatný email.";
}
- Funkce
json_encode()pro práci s JSON formátem:
$data = array(
"name" => "John",
"age" => 30,
"city" => "New York"
);
$jsonData = json_encode($data);
echo $jsonData;
Tato vylepšení zavedla lepší zabezpečení a kontrolu vstupních dat díky funkcím pro filtraci a validaci. Dále přidala podporu pro práci s formátem JSON, což je častý formát pro výměnu dat mezi aplikacemi.
PHP 5.3 (červen 2009)
Zavedení víceřádkových způsobů zápisu (string literals) Heredoc a Nowdoc. Díky ním lze vkládat rozsáhlé textové bloky do kódu bez potřeby escapovat zvláštní znaky, a zároveň zachovat formátování řetězců.
- Zavedení anonymních funkcí (closure) a podpora lambdových funkcí.
- Zavedeno klíčové slovo use pro anonymní funkce.
- Přidání funkcí pro manipulaci s jmennými prostory (namespaces).
- Vylepšení výjimečného zacházení (exception handling) s podporou namespace.
Heredoc:
php$name = "John"; $message = <<<EOT Hello $name, Welcome to our website! EOT; echo $message;Nowdoc:
php$name = "John"; $message = <<<'EOT' Hello $name, Welcome to our website! EOT; echo $message;funkcehtmlspecialchars()stále zůstává důležitou součástí PHP, i když máte k dispozici heredoc a nowdoc pro víceřádkové řetězce. Heredoc a nowdoc jsou užitečné pro vytváření víceřádkových řetězců bez nutnosti escapovat znaky, alehtmlspecialchars()je stále potřebné pro zabezpečení vstupních dat, která mohou obsahovat speciální znaky, aby nedocházelo k nechtěným interpretacím HTML kódu v těchto datech.Funkce
htmlspecialchars()se používá na nahrazení speciálních znaků, jako jsou <, >, &, atd., do jejich ekvivalentních HTML entit, což zajišťuje, že text bude zobrazen přesně tak, jak by měl, bez ohledu na to, co obsahuje.Takže i když můžete použít heredoc nebo nowdoc pro vytváření víceřádkových řetězců, stále je vhodné používat
htmlspecialchars()při práci s daty, která mají být zobrazena v HTML, aby se zabránilo riziku cross-site scripting (XSS) útoků nebo nechtěnému chování v aplikaci.- Anonymní funkce a lambda funkce (closures):
$add = function($a, $b) {
return $a + $b;
};
$result = $add(3, 5); // $result bude 8
Klíčové slovo use je součástí syntaxe anonymních funkcí - uzávěr. Slouží k tomu, aby bylo možné uzávěrám předat proměnné z okolního kontextu, které by jinak byly mimo dosah uzávěry. Pomocí klíčového slova use můžete specifikovat, které proměnné chcete "zachytit" a předat uzávěře pro její použití. Tím umožňuje klíčové slovo use explicitně říct, které proměnné by měly být dostupné v anonymní funkci.
Například:
$factor = 2;
$multiplier = function($number) use ($factor) {
return $number * $factor;
};
echo $multiplier(5); // Vypíše: 10
Ve výše uvedeném příkladu je proměnná $factor zachycena pomocí klíčového slova use a je dostupná v rámci anonymní funkce $multiplier, i když by jinak byla mimo dosah funkce.
- Jmenné prostory (namespaces):
namespace MyProject;
class MyClass {
// třída v rámci jmenného prostoru MyProject
}
$obj = new MyClass(); // vytvoření instance třídy pomocí jmenného prostoru
- Vylepšení výjimečného zacházení (exception handling) s podporou namespace:
namespace MyProject;
class MyException extends \Exception {}
try {
// nějaký kód, který může způsobit výjimku
throw new MyException("Toto je výjimka z mého projektu");
} catch (MyException $e) {
echo "Chyba: " . $e->getMessage();
} catch (\Exception $e) {
echo "Obecná chyba: " . $e->getMessage();
}
Tato vylepšení umožňují lepší organizaci kódu, izolaci funkcionalit a lepší zacházení s chybami a výjimkami v rozsáhlejších projektech.
PHP 5.4 (březen 2012)
- Zavedení krátké syntaxe pro pole ("short array syntax") s použitím závorek [], což zjednodušuje zápis polí.
PHP 5.5 (červenec 2013):
- Generátory: Zavedení generátorů umožnilo vytvářet iterátory pomocí jednoduché syntaxe a snižovalo paměťovou náročnost v případech, kdy bylo potřeba zpracovat velké množství dat.
Generátory umožňují vytvářet iterátory jednoduše a efektivně, což je užitečné, když pracujete s velkým množstvím dat. Generátory umožňují iteraci přes data bez nutnosti uložit všechna data v paměti najednou. Zde je příklad:
Příklad 1:
function simpleGenerator() {
yield 1;
yield 2;
yield 3;
}
foreach (simpleGenerator() as $value) {
echo $value . "\n";
}Příklad 2:
function simpleGenerator() { ... }
$generator = simpleGenerator();
echo $generator->current(); // Vypíše: 1 (aktuální položka)
$generator->next(); // Posune pointer na další položku
echo $generator->current(); // Vypíše: 2
$generator->rewind(); // Vrátí pointer na začátek
echo $generator->current(); // Vypíše: 1
PHP 5.6 (srpen 2014)
- Variadické funkce: Možnost použít proměnný počet argumentů u funkcí pomocí operátoru "...".
Příklad: function sum(...$numbers) {
$total = 0;
foreach ($numbers as $number) {
$total += $number;
}
return $total;
}
echo sum(1, 2, 3); // Vypíše: 6
echo sum(10, 20, 30, 40); // Vypíše: 100
Využití operátoru "...", který umožňuje použít "unpacking"
pro argumenty funkcí. To znamená, že argumenty zavolání funkce budou
automaticky zabaleny do pole a předány do funkce jako pole. V případě
funkce sum můžete použít neomezený počet argumentů, ať už jich je kolikkoliv.
Funkce sum přijímá proměnný počet argumentů, které jsou automaticky zabaleny do pole $numbers.
Následně je v cyklu projdou a sečtou, což umožňuje vytvořit funkci,
která pracuje s různým počtem čísel bez potřeby předdefinovaného počtu
argumentů.
PHP 5.7 (červenec 2015)
- Scalar Type Declarations: Byla přidána možnost definovat typy skalárních hodnot (int, float, string, bool) jako parametry funkcí a návratové hodnoty funkcí.
- Return Type Declarations: Možnost definovat návratový typ funkcí.
- Anonymous Classes: Zavedení anonymních tříd, což jsou třídy, které nejsou pojmenovány, a vytvářejí se dynamicky.
- Generator Return Expressions: Možnost použít
returnve funkci generátoru pro vrácení hodnoty.
PHP 5.8 (březen 2017)
- Return Type Hinting for Scalar Types: Rozšíření podpory pro návratové typy funkcí o skalární typy.
- Nullable Types: Možnost definovat typy jako nullable (null nebo daný typ).
- Builtin Web Server Improvements: Vylepšení vestavěného webového serveru.
- Closure::call(): Možnost volání uzávěrů s daným kontextem.
- New Operators: Přidání nových operátorů:
**=(exponenciální přiřazení),??=(null coalesce přiřazení).
PHP 7.0 (3. prosince 2015)
PHP 7.0 přinesla několik klíčových změn a novinek, které měly zásadní vliv na jazyk a jeho funkcionality. Zde jsou více detailů k některým z těchto novinek:
Zrychlení výkonu a Zend Engine 3.0: PHP 7.0 představilo významné zvýšení výkonu díky novému enginu Zend Engine 3.0. Díky optimalizacím a vylepšené správě paměti se PHP 7.0 stalo výrazně rychlejším než jeho předchůdce. Webové aplikace spuštěné pod PHP 7.0 běžely mnohem rychleji a efektivněji.
Null Coalescing Operator (??): Tento nový operátor umožňuje snadněji pracovat s hodnotami null. Pokud první hodnota výrazu není null, vrátí se tato hodnota, jinak se vrátí druhá hodnota. To usnadnilo kontrolu a manipulaci s hodnotami, které mohou být null.
Skalární typy v argumentech funkcí: PHP 7.0 přineslo možnost specifikovat očekávaný typ argumentu u funkcí. To znamená, že při volání funkce lze definovat, jaký typ dat se očekává. Tímto způsobem bylo možné lépe kontrolovat vstupy a snížit riziko chyb.
Návratové typy funkcí: Stejně jako u argumentů, bylo nyní možné definovat typ dat, který funkce vrátí. To znamená, že kód byl lépe dokumentovaný a mohly být aplikovány další vrstvy kontroly.
Skládání názvů jmenných prostorů: PHP 7.0 umožnilo skládat názvy jmenných prostorů pomocí operátoru "". To znamená, že bylo snazší pracovat s hlubšími strukturami jmenných prostorů a organizovat kód lépe.
Unicode (UTF-8) podpora: PHP 7.0 zavedlo plnou podporu pro Unicode a UTF-8 kódování. To bylo důležité pro mezinárodní aplikace, které pracují s různými jazyky a znakovými sadami.
Další vylepšení: Kromě těchto hlavních novinek přinesla verze PHP 7.0 i další vylepšení, jako například optimalizace a opravy chyb, což vedlo k celkově stabilnějšímu a výkonnějšímu prostředí pro vývoj webových aplikací.
PHP 7.1 (Prosinec 2016)
Nullable types: Možnost definovat parametry funkcí nebo návratové hodnoty jako nullable (null nebo daný typ).
Void return type: Byla přidána možnost definovat návratový typ funkce jako
void, což označuje, že funkce nevrací žádnou hodnotu.Short array syntax for list(): Zavedení zkrácené syntaxe pro destrukci pole s pomocí
list().Symmetric array destructuring: Možnost destrukturovat pole do jednotlivých proměnných pomocí nového operátoru
[...].Keys of arrays: Funkce
array_keys()nyní umožňuje pracovat s klíči asociativních polí.Catching multiple exceptions types: Možnost zachytávat více typů výjimek v jednom bloku
catch.Support for negative string offsets: Podpora negativních offsetů pro řetězce.
Context sensitive lexer: Zrychlení analýzy zdrojového kódu díky kontextově citlivému lexeru.
Iterable pseudo-type: Zavedení pseudo-typu
iterablepro parametry funkcí nebo návratové hodnoty.
PHP 7.2 (Listopad 2017):
Argument type declarations: Možnost definovat typy argumentů funkcí při deklaraci funkce.
Object type declarations: Zavedení nového typu
objectpro parametry funkcí a návratové hodnoty.Nullable types in parameter: Možnost definovat nullable typy pro parametry funkcí.
Trailing commas in list syntax: Zavedení podpory pro závěrečnou čárku v seznamu, pole nebo argumentu volání funkce.
Private class constants: Možnost definovat privátní konstanty v třídách.
Improved type inference for
foreach(): Zlepšení inferenčního chování při iteraci pomocíforeach().RFC: Parameter Type Widening: Možnost šířit typ parametru při dědičnosti tříd.
RFC: Deprecate and Remove: __autoload(): Odepsání funkce
__autoload().RFC: Deprecations for PHP 7.2: Deprecace několika funkcí a vlastností v PHP 7.2.
RFC: Object typehint: Zavedení object typehintu pro rozhraní a třídy.
RFC: Convert numeric keys in object/array casts: Zavedení konverze numerických klíčů při přetypování na objekt nebo pole.
PHP 7.3 (výskyt: prosinec 2018)
- Flexible Heredoc and Nowdoc Syntax: Zavedení nové syntaxe pro Heredoc a Nowdoc, která umožňuje flexibilnější manipulaci s odsazením a interpolačními řetězci. (Heredoc a Nowdoc jsou způsoby zápisu víceřádkových řetězcových literálů
(stringů) v jazyce PHP. Jsou často používány k definici dlouhých
textových bloků, například HTML, SQL dotazů nebo jiných víceřádkových
řetězcových hodnot, které mohou obsahovat speciální znaky, interpolace a
další struktury.)
- Trailing Commas in Function Calls: Možnost použít čárku na konci seznamu argumentů funkce, což usnadňuje správu změn.
- Array Destructuring in Function Calls: Možnost destrukturovat pole přímo při volání funkce. Umožňuje destrukturovat (rozložit) prvky pole přímo během volání funkce. Toto je užitečné, když chcete předat různé hodnoty z pole do funkce a pracovat s nimi jednodušeji.
- is_countable() Function: Přidání funkce
is_countable(), která umožňuje ověřit, zda daná hodnota může být použita jako pole při volánícount().
function addNumbers($a, $b) {
return $a + $b;
}
$numbers = [10, 5];
// Před PHP 7.1:
$result = addNumbers($numbers[0], $numbers[1]);
echo $result; // Vypíše: 15
// Od PHP 7.1 s použitím Array Destructuring:
$result = addNumbers(...$numbers);
echo $result; // Vypíše: 15 V tomto příkladu se funkce addNumbers volá s dvěma argumenty, které jsou destrukturovány z pole $numbers pomocí operátoru .... Tím se kód zkrátí a zpřehlední.
PHP 7.4 (výskyt: listopad 2019)
- Arrow Functions: Zavedení krátké syntaxe pro anonymní funkce s jedním výrazem a automatickým zachycením kontextu.
- Typed Properties: Možnost definovat typy pro vlastnosti tříd, což zlepšuje kontrolu datových typů.
- Covariant Returns and Contravariant Parameters: Zlepšení podpory pro variace typů při zdědění metod v třídách a rozhraních.
- Null Coalescing Assignment Operator: Zavedení operátoru
??=pro efektivnější přiřazování hodnoty, pokud je hodnota null. - Preloading: Zavedení možnosti přednačítání kódu pro zrychlení spouštění skriptů.
Arrow Functions (také nazývané "short syntax anonymous functions") jsou novinkou v PHP 7.4, která zavádí zjednodušenou syntaxi pro definici anonymních funkcí s jedním výrazem. Tyto funkce automaticky zachytávají kontext (závěrečný stav) okolního kódu.
Příklad:
$numbers = [1, 2, 3, 4, 5];
// Před PHP 7.4:
$squared = array_map(function($number) {
return $number * $number;
}, $numbers);
// Od PHP 7.4 s použitím Arrow Function:
$squared = array_map(fn($number) => $number * $number, $numbers);
print_r($squared); // Vypíše: Array ( [0] => 1 [1] => 4 [2] => 9 [3] => 16 [4] => 25 )
V tomto příkladu funkce je definována pomocí zjednodušené syntaxe s použitím šipky =>. Tato syntaxe je vhodná pro jednoduché výrazy a zpřehledňuje kód. Arrow Functions automaticky zachytávají proměnné ze svého okolí, což umožňuje jejich použití bez nutnosti explictně používat klíčové slovo use pro zachycení kontextu.
Žádné komentáře:
Okomentovat