PHP 7 - Szybki przewodnik
Co to jest PHP 7?
PHP 7 to główne wydanie języka programowania PHP, które jest reklamowane jako rewolucja w sposobie tworzenia i dostarczania aplikacji internetowych na urządzenia mobilne do przedsiębiorstw i chmury. To wydanie jest uważane za najważniejszą zmianę dla PHP po wydaniu PHP 5 w 2004 roku.
Nowe funkcje
Do PHP 7 dodano dziesiątki funkcji, z których najważniejsze wymieniono poniżej -
Improved performance - Po scaleniu kodu PHPNG w PHP7 jest dwukrotnie szybszy niż PHP 5.
Lower Memory Consumption - Zoptymalizowane PHP 7 wykorzystuje mniejsze zasoby.
Scalar type declarations - Teraz można wymusić parametry i typy zwracane.
Consistent 64-bit support - Spójne wsparcie dla maszyn o architekturze 64-bitowej.
Improved Exception hierarchy - Poprawiona hierarchia wyjątków.
Many fatal errors converted to Exceptions - Zakres wyjątków został zwiększony, obejmując wiele błędów krytycznych konwertowanych jako wyjątki.
Secure random number generator - Dodanie nowego bezpiecznego API generatora liczb losowych.
Deprecated SAPIs and extensions removed - Różne stare i nieobsługiwane elementy SAPI i rozszerzenia są usuwane z najnowszej wersji.
The null coalescing operator (??) - Dodano nowy zerowy operator koalescencji.
Return and Scalar Type Declarations - Dodano obsługę typu zwracanego i typu parametru.
Anonymous Classes - Dodano obsługę anonimowych.
Zero cost asserts - Dodano obsługę asercji zerowych kosztów.
PHP 7 używa nowego Zend Engine 3.0 do prawie dwukrotnej poprawy wydajności aplikacji i 50% lepszego zużycia pamięci niż PHP 5.6. Pozwala na obsługę większej liczby jednoczesnych użytkowników bez dodatkowego sprzętu. PHP 7 zostało zaprojektowane i przeprojektowane z uwzględnieniem dzisiejszych obciążeń.
Według zespołu Zend , poniższe ilustracje pokazują porównanie wydajności PHP 7 z PHP 5.6 i HHVM 3.7 w popularnych aplikacjach opartych na PHP.
Magento 1.9
PHP 7 sprawdza się ponad dwukrotnie szybciej niż PHP 5.6 podczas wykonywania transakcji Magento.
Drupal 7
PHP 7 sprawdza się ponad dwukrotnie szybciej niż PHP 5.6 podczas wykonywania transakcji na Drupalu.
Wordpress 3.6.0
PHP 7 sprawdza się ponad dwukrotnie szybciej niż PHP 5.6 podczas wykonywania transakcji Wordpress.
Porównanie języków dynamicznych
Wypróbuj opcję online
Stworzyliśmy środowisko programowania PHP on-line, abyś mógł skompilować i wykonać wszystkie dostępne przykłady online. Daje ci pewność co do tego, co czytasz i umożliwia weryfikację programów za pomocą różnych opcji. Zapraszam do modyfikowania dowolnego przykładu i wykonywania go online.
Wypróbuj poniższy przykład, korzystając z naszego kompilatora online dostępnego w CodingGround.
<html> <head> <title>Online PHP Script Execution</title> </head> <body> <?php echo "<h1>Hello, PHP!</h1>"; ?> </body> </html>
W przypadku większości przykładów podanych w tym samouczku znajdziesz plik Try itopcja w naszych sekcjach kodu witryny w prawym górnym rogu, która przeniesie Cię do kompilatora online. Po prostu korzystaj i ciesz się nauką.
Aby móc tworzyć i uruchamiać strony internetowe PHP, w systemie komputerowym muszą być zainstalowane trzy istotne komponenty.
Web Server- PHP działa z praktycznie każdym oprogramowaniem serwera sieci Web, w tym z Internet Information Server (IIS) firmy Microsoft, ale najczęściej używany jest serwer Apache. Pobierz bezpłatnie Apache tutaj -http://httpd.apache.org/download.cgi
Database- PHP PHP działa z praktycznie każdym oprogramowaniem bazodanowym, w tym Oracle i Sybase, ale najczęściej używana jest baza danych MySQL. Pobierz MySQL za darmo tutaj -http://www.mysql.com/downloads/
PHP Parser- Aby przetwarzać instrukcje skryptu PHP, należy zainstalować parser generujący dane wyjściowe HTML, które można wysłać do przeglądarki internetowej. Ten samouczek poprowadzi Cię, jak zainstalować parser PHP na komputerze.
Instalacja parsera PHP
Zanim przejdziesz dalej, ważne jest, aby upewnić się, że masz odpowiednie środowisko na swoim komputerze, aby tworzyć programy internetowe przy użyciu PHP. Przechowuj następujący plik php w folderze htdocs Apache.
phpinfo.php
<?php
phpinfo();
?>
Wpisz następujący adres w polu adresu przeglądarki.
http://127.0.0.1/phpinfo.php
Jeśli wyświetli się strona pokazująca informacje związane z instalacją PHP, oznacza to, że masz poprawnie zainstalowane PHP i serwer WWW. W przeciwnym razie musisz postępować zgodnie z podaną procedurą, aby zainstalować PHP na swoim komputerze.
Ta sekcja poprowadzi Cię przez instalację i konfigurację PHP na następujących czterech platformach -
Instalacja PHP w systemie Linux lub Unix z Apache
Instalacja PHP na Mac OS X z Apache
Instalacja PHP w systemie Windows NT / 2000 / XP z IIS
Instalacja PHP na Windows NT / 2000 / XP z Apache
Konfiguracja Apache
Jeśli używasz Apache jako serwera internetowego, ta sekcja poprowadzi Cię do edycji plików konfiguracyjnych Apache.
Sprawdź tutaj - Konfiguracja PHP na serwerze Apache
Konfiguracja pliku PHP.INI
Plik konfiguracyjny PHP, php.ini, to ostateczny i natychmiastowy sposób na zmianę funkcjonalności PHP.
Sprawdź tutaj - Konfiguracja pliku PHP.INI
Konfiguracja Windows IIS
Aby skonfigurować usługi IIS na komputerze z systemem Windows, zapoznaj się z podręcznikiem informacyjnym usług IIS dostarczanym wraz z usługami IIS.
W PHP 7 została wprowadzona nowa funkcja, deklaracje typów skalarnych. Deklaracja typu skalarnego ma dwie opcje -
coercive - koercja jest trybem domyślnym i nie trzeba jej określać.
strict - tryb ścisły musi wyraźnie wskazywać.
Następujące typy parametrów funkcji można wymusić za pomocą powyższych trybów -
- int
- float
- bool
- string
- interfaces
- array
- callable
Przykład - tryb przymusu
<?php
// Coercive mode
function sum(int ...$ints) {
return array_sum($ints);
}
print(sum(2, '3', 4.1));
?>
Tworzy następujące dane wyjściowe przeglądarki -
9
Przykład - tryb ścisły
<?php
// Strict mode
declare(strict_types=1);
function sum(int ...$ints) {
return array_sum($ints);
}
print(sum(2, '3', 4.1));
?>
Tworzy następujące dane wyjściowe przeglądarki -
Fatal error: Uncaught TypeError: Argument 2 passed to sum() must be of the type integer, string given, ...
W PHP 7 nowa funkcja, Return type declarationszostał wprowadzony. Deklaracja typu zwracanego określa typ wartości, którą funkcja powinna zwrócić. Można zadeklarować następujące typy zwracanych typów.
- int
- float
- bool
- string
- interfaces
- array
- callable
Przykład - prawidłowy typ zwrotu
<?php
declare(strict_types = 1);
function returnIntValue(int $value): int {
return $value;
}
print(returnIntValue(5));
?>
Tworzy następujące dane wyjściowe przeglądarki -
5
Przykład - nieprawidłowy typ zwrotu
<?php
declare(strict_types = 1);
function returnIntValue(int $value): int {
return $value + 1.0;
}
print(returnIntValue(5));
?>
Tworzy następujące dane wyjściowe przeglądarki -
Fatal error: Uncaught TypeError: Return value of returnIntValue() must be of the type integer, float returned...
W PHP 7 nowa funkcja, null coalescing operator (??)został wprowadzony. Służy do zastąpieniaternaryoperacja w połączeniu z funkcją isset (). PlikNulloperator koalescencji zwraca swój pierwszy operand, jeśli istnieje i nie ma wartości NULL; w przeciwnym razie zwraca swój drugi operand.
Przykład
<?php
// fetch the value of $_GET['user'] and returns 'not passed'
// if username is not passed
$username = $_GET['username'] ?? 'not passed';
print($username);
print("<br/>");
// Equivalent code using ternary operator
$username = isset($_GET['username']) ? $_GET['username'] : 'not passed';
print($username);
print("<br/>");
// Chaining ?? operation
$username = $_GET['username'] ?? $_POST['username'] ?? 'not passed';
print($username);
?>
Tworzy następujące dane wyjściowe przeglądarki -
not passed
not passed
not passed
W PHP 7 została wprowadzona nowa funkcja, operator statku kosmicznego. Służy do porównywania dwóch wyrażeń. Zwraca wartość -1, 0 lub 1, gdy pierwsze wyrażenie jest odpowiednio mniejsze, równe lub większe niż drugie wyrażenie.
Przykład
<?php
//integer comparison
print( 1 <=> 1);print("<br/>");
print( 1 <=> 2);print("<br/>");
print( 2 <=> 1);print("<br/>");
print("<br/>");
//float comparison
print( 1.5 <=> 1.5);print("<br/>");
print( 1.5 <=> 2.5);print("<br/>");
print( 2.5 <=> 1.5);print("<br/>");
print("<br/>");
//string comparison
print( "a" <=> "a");print("<br/>");
print( "a" <=> "b");print("<br/>");
print( "b" <=> "a");print("<br/>");
?>
Tworzy następujące dane wyjściowe przeglądarki -
0
-1
1
0
-1
1
0
-1
1
Stałe tablicowe można teraz definiować za pomocą define()funkcjonować. W PHP 5.6 można je było zdefiniować tylko za pomocąconst słowo kluczowe.
Przykład
<?php
//define a array using define function
define('animals', [
'dog',
'cat',
'bird'
]);
print(animals[1]);
?>
Tworzy następujące dane wyjściowe przeglądarki -
cat
Klasy anonimowe można teraz definiować przy użyciu nowej klasy. Zamiast pełnej definicji klasy można użyć klasy anonimowej.
Przykład
<?php
interface Logger {
public function log(string $msg);
}
class Application {
private $logger;
public function getLogger(): Logger {
return $this->logger;
}
public function setLogger(Logger $logger) {
$this->logger = $logger;
}
}
$app = new Application;
$app->setLogger(new class implements Logger {
public function log(string $msg) {
print($msg);
}
});
$app->getLogger()->log("My first Log Message");
?>
Tworzy następujące dane wyjściowe przeglądarki -
My first Log Message
Closure::call()metoda jest dodawana jako skrótowy sposób tymczasowego powiązania zakresu obiektu z zamknięciem i wywołania go. Jest znacznie szybszy w porównaniu dobindTo w PHP 5.6.
Przykład - Pre PHP 7
<?php
class A {
private $x = 1;
}
// Define a closure Pre PHP 7 code
$getValue = function() {
return $this->x;
};
// Bind a clousure
$value = $getValue->bindTo(new A, 'A');
print($value());
?>
Tworzy następujące dane wyjściowe przeglądarki -
1
Przykład - PHP 7+
<?php
class A {
private $x = 1;
}
// PHP 7+ code, Define
$value = function() {
return $this->x;
};
print($value->call(new A));
?>
Tworzy następujące dane wyjściowe przeglądarki -
1
PHP 7 wprowadza filtrowane unserialize()funkcja zapewniająca większe bezpieczeństwo podczas odserializowania obiektów na niezaufanych danych. Zapobiega możliwym wstrzyknięciom kodu i umożliwia programiście umieszczanie na białej liście klas, które mogą być nieserializowane.
Przykład
<?php
class MyClass1 {
public $obj1prop;
}
class MyClass2 {
public $obj2prop;
}
$obj1 = new MyClass1();
$obj1->obj1prop = 1;
$obj2 = new MyClass2();
$obj2->obj2prop = 2;
$serializedObj1 = serialize($obj1);
$serializedObj2 = serialize($obj2);
// default behaviour that accepts all classes
// second argument can be ommited.
// if allowed_classes is passed as false, unserialize converts all objects into __PHP_Incomplete_Class object
$data = unserialize($serializedObj1 , ["allowed_classes" => true]);
// converts all objects into __PHP_Incomplete_Class object except those of MyClass1 and MyClass2
$data2 = unserialize($serializedObj2 , ["allowed_classes" => ["MyClass1", "MyClass2"]]);
print($data->obj1prop);
print("<br/>");
print($data2->obj2prop);
?>
Tworzy następujące dane wyjściowe przeglądarki -
1
2
W PHP7 nowy IntlCharKlasa jest dodawana, co ma na celu udostępnienie dodatkowych funkcji ICU. Ta klasa definiuje szereg statycznych metod i stałych, których można używać do manipulowania znakami Unicode. Musisz miećIntl rozszerzenie zainstalowane przed użyciem tej klasy.
Przykład
<?php
printf('%x', IntlChar::CODEPOINT_MAX);
print (IntlChar::charName('@'));
print(IntlChar::ispunct('!'));
?>
Tworzy następujące dane wyjściowe przeglądarki -
10ffff
COMMERCIAL AT
true
W PHP 7 wprowadzono dwie nowe funkcje do generowania kryptograficznie bezpiecznych liczb całkowitych i łańcuchów w sposób wieloplatformowy.
random_bytes() - Generuje kryptograficznie bezpieczne bajty pseudolosowe.
random_int() - Generuje bezpieczne kryptograficznie pseudolosowe liczby całkowite.
random_bytes ()
random_bytes () generuje ciąg kryptograficznych losowych bajtów o dowolnej długości, które są odpowiednie do użytku kryptograficznego, na przykład podczas generowania soli, kluczy lub wektorów inicjalizacyjnych.
Składnia
string random_bytes ( int $length )
Parametry
length - długość losowego ciągu, który powinien zostać zwrócony w bajtach.
Zwracane wartości
Zwraca ciąg zawierający żądaną liczbę bezpiecznych kryptograficznie bajtów losowych.
Błędy / wyjątki
Jeśli nie można znaleźć odpowiedniego źródła losowości, zostanie zgłoszony wyjątek.
Jeśli podano nieprawidłowe parametry, a TypeError zostanie wyrzucony.
Jeśli zostanie podana nieprawidłowa długość bajtów, zostanie zgłoszony błąd.
Przykład
<?php
$bytes = random_bytes(5);
print(bin2hex($bytes));
?>
Tworzy następujące dane wyjściowe przeglądarki -
54cc305593
random_int ()
random_int() generuje kryptograficzne losowe liczby całkowite, które są odpowiednie do użycia tam, gdzie krytyczne są obiektywne wyniki.
Składnia
int random_int ( int $min , int $max )
Parametry
min - najniższa wartość do zwrócenia, która musi być PHP_INT_MIN lub wyżej.
max - Najwyższa wartość do zwrócenia, która musi być mniejsza lub równa PHP_INT_MAX.
Zwracane wartości
Zwraca bezpieczną kryptograficznie losową liczbę całkowitą z zakresu od min do max włącznie.
Błędy / wyjątki
Jeśli nie można znaleźć odpowiedniego źródła losowości, plik Exception zostanie wyrzucony.
Jeśli podano nieprawidłowe parametry, a TypeError zostanie wyrzucony.
Jeśli max jest mniejsze niż min, plik Error zostanie wyrzucony.
Przykład
<?php
print(random_int(100, 999));
print(" ");
print(random_int(-1000, 0));
?>
Tworzy następujące dane wyjściowe przeglądarki -
614
-882
Expectationssą wstecznie kompatybilnym rozszerzeniem starszej funkcji assert (). Oczekiwanie umożliwia asercje o zerowych kosztach w kodzie produkcyjnym i zapewnia możliwość zgłaszania niestandardowych wyjątków, gdy asercja nie powiedzie się. assert () jest teraz konstrukcją językową, w której pierwszy parametr jest wyrażeniem w porównaniu do bycia ciągiem znaków lub wartością logiczną do przetestowania.
Dyrektywy konfiguracji dla assert ()
Dyrektywa | Domyślna wartość | Możliwa wartość |
---|---|---|
zend.assertions | 1 | 1 - generowanie i wykonywanie kodu (tryb programowania) 0 - generuj kod, ale przeskakuj go w czasie wykonywania -1 - nie generuj kodu (tryb produkcyjny) |
assert.exception | 0 | 1 - throw, gdy asercja nie powiedzie się, albo przez wyrzucenie obiektu dostarczonego jako wyjątek, albo przez zgłoszenie nowego AssertionError obiekt, jeśli nie podano wyjątku. 0 - użyj lub wygeneruj Throwable, jak opisano powyżej, ale generuje ostrzeżenie tylko na podstawie tego obiektu, zamiast go rzucać (kompatybilne z zachowaniem PHP 5) |
Parametry
assertion- Stwierdzenie. W PHP 5 musi to być ciąg znaków do oceny lub wartość logiczna do przetestowania. W PHP 7 może to być również dowolne wyrażenie zwracające wartość, która zostanie wykonana, a wynik jest używany do wskazania, czy asercja się powiodła, czy nie.
description - opcjonalny opis, który zostanie dołączony do komunikatu o błędzie, jeśli asercja się nie powiedzie.
exception - W PHP 7 drugim parametrem może być a Throwable obiekt zamiast opisowego ciągu znaków, w takim przypadku jest to obiekt, który zostanie wyrzucony, jeśli stwierdzenie nie powiedzie się, a assert.exception dyrektywa konfiguracji jest włączona.
Zwracane wartości
FALSE jeśli twierdzenie jest fałszywe, TRUE Inaczej.
Przykład
<?php
ini_set('assert.exception', 1);
class CustomError extends AssertionError {}
assert(false, new CustomError('Custom Error Message!'));
?>
Tworzy następujące dane wyjściowe przeglądarki -
Fatal error: Uncaught CustomError: Custom Error Message! in...
Począwszy od PHP7, jedna instrukcja użycia może być używana do importowania klas, funkcji i stałych z tej samej przestrzeni nazw zamiast wielu instrukcji użycia.
Przykład
<?php
// Before PHP 7
use com\tutorialspoint\ClassA;
use com\tutorialspoint\ClassB;
use com\tutorialspoint\ClassC as C;
use function com\tutorialspoint\fn_a;
use function com\tutorialspoint\fn_b;
use function com\tutorialspoint\fn_c;
use const com\tutorialspoint\ConstA;
use const com\tutorialspoint\ConstB;
use const com\tutorialspoint\ConstC;
// PHP 7+ code
use com\tutorialspoint\{ClassA, ClassB, ClassC as C};
use function com\tutorialspoint\{fn_a, fn_b, fn_c};
use const com\tutorialspoint\{ConstA, ConstB, ConstC};
?>
Od PHP 7 zmieniono obsługę błędów i raportowanie. Zamiast raportowania błędów za pomocą tradycyjnego mechanizmu raportowania błędów używanego w PHP 5, obecnie większość błędów jest obsługiwana przez zgłaszanie wyjątków błędów. Podobnie jak w przypadku wyjątków, te wyjątki błędów pojawiają się, dopóki nie osiągną pierwszego pasującego bloku catch. Jeśli nie ma pasujących bloków, domyślny program obsługi wyjątków jest instalowany zset_exception_handler()będzie wezwany. W przypadku braku domyślnej procedury obsługi wyjątków wyjątek zostanie przekształcony w błąd krytyczny i będzie traktowany jak tradycyjny błąd.
Ponieważ hierarchia błędów nie jest rozszerzona z Exception, kod używający bloków catch (Exception $ e) {...} do obsługi nieprzechwyconych wyjątków w PHP 5 nie będzie obsługiwał takich błędów. Blok (błąd $ e) {...} lubset_exception_handler() program obsługi jest wymagany do obsługi błędów krytycznych.
Przykład
<?php
class MathOperations {
protected $n = 10;
// Try to get the Division by Zero error object and display as Exception
public function doOperation(): string {
try {
$value = $this->n % 0;
return $value;
} catch (DivisionByZeroError $e) {
return $e->getMessage();
}
}
}
$mathOperationsObj = new MathOperations();
print($mathOperationsObj->doOperation());
?>
Tworzy następujące dane wyjściowe przeglądarki -
Modulo by zero
PHP 7 wprowadza nową funkcję intdiv(), który wykonuje dzielenie całkowitoliczbowe swoich operandów i zwraca dzielenie jako int.
Przykład
<?php
$value = intdiv(10,3);
var_dump($value);
print(" ");
print($value);
?>
Tworzy następujące dane wyjściowe przeglądarki -
int(3)
3
Od PHP7 +, session_start() funkcja akceptuje tablicę opcji, aby zastąpić dyrektywy konfiguracji sesji ustawione w php.ini. Te opcje obsługująsession.lazy_write, która jest domyślnie włączona i powoduje, że PHP nadpisuje dowolny plik sesji, jeśli dane sesji uległy zmianie.
Kolejną dodaną opcją jest read_and_close, co oznacza, że należy odczytać dane sesji i natychmiast zamknąć sesję w niezmienionym stanie. Na przykład Setsession.cache_limiter prywatne i ustaw flagę, aby zamknąć sesję natychmiast po jej przeczytaniu, używając następującego fragmentu kodu.
<?php
session_start([
'cache_limiter' => 'private',
'read_and_close' => true,
]);
?>
Następujące funkcje są przestarzałe i mogą zostać usunięte z przyszłych wydań PHP.
Konstruktory w stylu PHP 4
Konstruktory w stylu PHP 4 to metody o tej samej nazwie, co klasa, w której są zdefiniowane, są teraz przestarzałe i zostaną usunięte w przyszłości. PHP 7 wyemituje E_DEPRECATED, jeśli konstruktor PHP 4 jest jedynym konstruktorem zdefiniowanym w klasie. Klasy implementujące metodę __construct () pozostają niezmienione.
Przykład
<?php
class A {
function A() {
print('Style Constructor');
}
}
?>
Tworzy następujące dane wyjściowe przeglądarki -
Deprecated: Methods with the same name as their class will not be constructors
in a future version of PHP; A has a deprecated constructor in...
Statyczne wywołania metod niestatycznych
Statyczne wywołania metod niestatycznych są przestarzałe i mogą zostać usunięte w przyszłości.
Przykład
<?php
class A {
function b() {
print('Non-static call');
}
}
A::b();
?>
Tworzy następujące dane wyjściowe przeglądarki -
Deprecated: Non-static method A::b() should not be called statically in...
Non-static call
password_hash () opcja soli
Opcja soli dla password_hash()funkcja została przestarzała, więc programiści nie generują własnych (zwykle niezabezpieczonych) soli. Sama funkcja generuje kryptograficznie bezpieczną sól, gdy programista nie dostarcza soli - dzięki temu niestandardowe generowanie soli nie jest już wymagane.
Capture_session_meta Opcja kontekstu SSL
Plik capture_session_metaOpcja kontekstu SSL została wycofana. Metadane SSL są teraz używane przezstream_get_meta_data() funkcjonować.
Następujące rozszerzenia zostały usunięte z PHP 7 i nowszych -
- ereg
- mssql
- mysql
- sybase_ct
Następujące interfejsy SAPI zostały usunięte z PHP 7 i nowszych -
- aolserver
- apache
- apache_hooks
- apache2filter
- caudium
- continuity
- isapi
- milter
- nsapi
- phttpd
- pi3web
- roxen
- thttpd
- tux
- webjames