[PHP] Co nowego w 5.4?
PHP w wersji 5.4 znalazło się niedawno w w dystrybucji unstable Debiana. Czas zwrócić więc trochę więcej uwagi na to, co zmienia się w tej wersji.
- tryby safe_mode oraz register_globals zostały całkowicie usunięte
- domyślnym kodowaniem jest utf8
- magic_quotes jest przestarzałe (deprecated)
- Poprawione rozszerzenie obsługi sesji
- możliwość obsługi postępu wysyłania (odpowiednia konfiguracja pliku php.ini)
- możliwość sprawdzenia stanu sesji – funkcja
session_status()
- obiektowe handlery sesji
- Wbudowany serwer www
- mały, na razie tylko do zastosowań deweloperskich (php -S localhost:8080)
- Trzy nowe, zarezerwowane słowa
- callable – nowy typ dla zmiennych,
- trait (cecha) – specjalne konstrukcje podobne do klas, ale posiadające jedynie zestaw funkcji, które można następnie „wstrzyknąć” na etapie kompilacji do kodu każdej innej dowolnej klasy – coś jak wielokrotne dziedziczenie w C++. Po prostu klasa, która posiada (use – używa) danej cechy, może korzystać z jej funkcji(jednej lub wielu)
trait Konsumpcja {
public function jedz{ ... }
}
class Paczek {
use Konsumpcja ;
// ...
}
class Kanapka extends Sniadanie {
use Konsumpcja ;
// ...
}
// metoda jest teraz dostępna dla obu klas
InstancjaPaczek ::jedz();
InstancjaKanapka::jedz(); - insteadof – słowo kluczowe, które może przydać się, gdy stosujemy np.: cechy z funkcjami o tej samej nazwie
class MyClass{
use Cecha1, Cecha2 {
Cecha1:metoda insteadof Cecha2;
Cecha2:metoda as metodainna;
}
}
- Inne
- Type hint dla typów prostych
class Foo
{
public function bar(int $i)
{
// kod
}
} - Możliwość korzystania ze zmiennej $this w closure (funkcja anonimowa)
- krótka forma definicji tablic
$tablica = ['jablko', '5.4', 'grucha', '0.0001'];
- Dostęp do tablicy z poziomu funkcji/metody
echo funkcja()[2];
- możliwość wywołania callbacków jak funkcji
class Paczek {
function zjedz(){
echo 'paczek bedzie skonsumowany';
}
}
$funkcja = array('Paczek', 'zjedz');
$funkcja(); - binarna notacja dla liczb rzeczywistych
$bin = 0b0101010;
print_r($bin);
/*
Wynik: 42
*/ - funkcja http_response_code zwracająca kod nagłówka
echo(http_response_code());
/**
Wynik: 200
*/
// Ustawianie kodu naglowka
http_response_code(404);
// Pobieranie kodu naglowka
echo(http_response_code());
/**
Wynik: 404
*/ - obsługa wywołania własnej metody obiektu przy jego inicjalizacji
class Paczek{
function zjedz(){
echo 'paczek bedzie skonsumowany';
}
}
//PHP 5.3
$mniam = new Paczek();
$mnian->zjedz();
//PHP 5.4
(new Paczek)->zjedz(); - funkcja class_uses zwraca używane przed daną klasę cechy
trait foo {}
trait log {}
trait foobar {}
class bar {
use foo;
use foobar;
}
print_r(class_uses(new bar));
print_r(class_uses('bar'));
/**
* Result:
*
Array
(
[foo] => foo
[foobar] => foobar
)
Array
(
[foo] => foo
[foobar] => foobar
)
*/ - Dodana opcja JSON_PRETTY_PRINT
$obj = new stdClass;
$obj->field1 = "hello";
$obj->field2 = "world";
$obj->field3 = array("key" => "value", "level2" => array(1,2,3));
echo json_encode($obj);
echo json_encode($obj, JSON_PRETTY_PRINT);
/*output:
{"field1":"hello","field2":"world","field3":{"key":"value","level2":[1,2,3]}}
{
"field1": "hello",
"field2": "world",
"field3": {
"key": "value",
"level2": [
1,
2,
3
]
}
}
*/ - obsługa iteratorów w MySQLi
$mysqli = new mysqli('localhost', 'root', 'xxxx', 'piekarnia');
$result = $mysqli->query("SELECT * FROM piekarze LIMIT 10");
foreach($result as $piekarz){
echo $piekarz['name'];
}
$mysqli->close(); - I wiele wiele innych…
- Type hint dla typów prostych