Heim > Artikel > Backend-Entwicklung > Detaillierte Beispiele für neue Funktionen in PHP7.1 und 7.2
Neue Funktionen in PHP7.1
Die Typdeklaration von Parametern und Rückgabewerten kann durch Hinzufügen eines Fragezeichens (?
vor dem Typ) erfolgen name ), um es als null zu markieren. Gibt an, dass der Typ eines Funktionsparameters oder Rückgabewerts entweder der angegebene Typ oder null ist.
Sehen Sie sich das Beispiel an:
function testReturn(?string $name){ return $name; } var_dump(testReturn('yangyi')); var_dump(testReturn(null)); var_dump(testReturn2());
Druckausgabe:
$ php php71.phpstring(6) "yangyi"NULL PHP Fatal error: Uncaught ArgumentCountError: Too few arguments to function testReturn(), 0 passed in php71.php on line 22 and exactly 1 expected in php71.php:14Stack trace:#0 php71.php(22): testReturn()#1 {main} thrown in php71.php on line 14
Das Gleiche wie oben: Der Dritte hat einen schwerwiegenden Fehler gemeldet.
Schauen wir uns den Fall an, in dem der Funktionsrückgabewert Nullable
ist:
function testReturn3() : ?string{ //return "abc"; //return null;} var_dump(testReturn3());
Wenn ?
hinzugefügt wird, wird entweder ein String oder Null zurückgegeben. Sie können nichts zurückgeben. Es wird ein Fehler gemeldet.
PHP7.0 hat die Funktion zur Angabe des Funktionsrückgabetyps hinzugefügt, aber der Rückgabetyp kann nicht als void angegeben werden. Diese Funktion von 7.1 ist eine Ergänzung. Eine mit dem Rückgabetyp void
definierte Funktion kann keinen Rückgabewert haben, auch wenn sie null zurückgibt:
function testReturn4() : void{ //1. 要么啥都不返还 ok //2. 要么只return; ok //return; //3. return null 也会报错 //return null; //4. return 4 会报错 //return 4;}
Fatal error: A void function must not return a value in /php71.php on line 70
Außerdem kann void nur für Rückgabewerte und nicht für Parameter verwendet werden. Folgendes meldet beispielsweise einen Fehler:
function testReturn6(void $a) : void{} var_dump(testReturn6());
PHP Fatal error: void cannot be used as a parameter type in php71.php on line 73
Wenn eine Methode in der Klassenvererbung als void-Rückgabetyp deklariert ist und die Unterklasse ihn erbt und überschreibt, kann sie nur void zurückgeben , andernfalls wird ein Fehler ausgelöst. :
<?php class Foo{ public function bar(): void { } }class Foobar extends Foo{ // 覆盖失败 public function bar(): array { // Fatal error: Declaration of Foobar::bar() must be compatible with Foo::bar(): void } }
Sie müssen dies also tun, und Sie erhalten keinen Fehler:
class Foo{ public $a; public function bar(): void { $this->a = 2; } }class Foobar extends Foo{ // 覆盖成功 public function bar(): void { $this->a = 3; } }
[]
) Abkürzung und fügen Sie den angegebenen Schlüssel hinzuSie können die Liste verwenden, um schnell zu durchlaufen, um die Werte im Array abzurufen. Die Abkürzung []
kann nun verwendet werden.
$data = [ [1, 'Tom'], [2, 'Fred'], ];// list() stylelist($id1, $name1) = $data[0];// [] style[$id1, $name1] = $data[0];// list() styleforeach ($data as list($id, $name)) { // logic here with $id and $name}// [] styleforeach ($data as [$id, $name]) { // logic here with $id and $name}
Darüber hinaus kann diese aktualisierte Liste auch einen Schlüssel für das Indexarray angeben. Dieses Upgrade ist großartig und sehr praktisch.
$data = [ ["id" => 1, "name" => 'Tom'], ["id" => 2, "name" => 'Fred'], ];// list() stylelist("id" => $id1, "name" => $name1) = $data[0]; // [] style["id" => $id1, "name" => $name1] = $data[0]; // list() styleforeach ($data as list("id" => $id, "name" => $name)) { // logic here with $id and $name } // [] styleforeach ($data as ["id" => $id, "name" => $name]) { // logic here with $id and $name}
Bevor diese Funktion nicht verfügbar war, haben wir normalerweise while
+ each
verwendet, um das Indexarray mit list
zu durchlaufen:
$data = [ ["id" => 1, "name" => 'Tom'], ["id" => 2, "name" => 'Fred'], ];while (list($id, name) = each($data)) { echo "$key => $val\n"; }
Hinweis: Die Each-Funktion wurde in PHP 7.2 entfernt! Verwenden Sie diese Methode daher nicht zum Durchlaufen des Indexarrays
Die Konstanten in der Klasse wurden zuvor mit const
deklariert, und das waren sie auch nicht sichtbares Attribut. Jetzt werden die sichtbaren Attribute der Methode übertragen:
<?php class ConstDemo { // 常量默认为 public const PUBLIC_CONST = 0; // 可以自定义常量的可见范围 public const PUBLIC_CONST_B = 2; protected const PROTECTED_CONST = 3; private const PRIVATE_CONST = 4; // 多个常量同时声明只能有一个属性 private const FOO = 1, BAR = 2; }
Die Verwendungsmethode ist dieselbe wie die Methode der Klasse. Ich werde nicht auf Details eingehen.
Es gibt zwei Aktualisierungen: 1 dient dazu, den String direkt zu übernehmen, und 2 bedeutet, dass der dritte Parameter der strpos-Funktion negative Zahlen unterstützt. Zeigt das Nehmen vom Schwanz an.
var_dump("abcdef"[-2]); // evar_dump(strpos("aabbcc", "b", -3)); //3
Die String-Variable kann den Wert direkt annehmen, ohne den Variablennamen zu übergeben. Sie wurde in PHP5.5 hinzugefügt. Jetzt können Sie es vom Ende nehmen:
var_dump("abcdef"[-2]); // 从末尾取倒数第2个字符:evar_dump("abcdef"[2]); // 从前面取第2个,从0开始:c$string = 'bar';echo $string[1], $string[-1]; // a r
In der vorherigen try...catch-Anweisung kann jeder Catch nur eine bedingte Beurteilung festlegen:
try { // Some code...} catch (ExceptionType1 $e) { // 处理 ExceptionType1} catch (ExceptionType2 $e) { // 处理 ExceptionType2} catch (Exception $e) { // ...}
Jetzt können mehrere gleichzeitig verarbeitet werden. Mit „|
“ teilen.
try { // Some code... } catch (ExceptionType1 | ExceptionType2 $e) { // 对于 ExceptionType1 和 ExceptionType2 的处理 } catch (Exception $e) { // ...}
php 7.2 ist größtenteils ein Update auf unterster Ebene zur Verbesserung der Leistung. Es gibt nicht viele Aktualisierungen auf der Ebene der allgemeinen Syntax, daher werden wir sie hier überspringen.
Ich habe zuvor über die neuen Funktionen und neuen Funktionen von PHP7.0 und älteren PHP-Versionen geschrieben. Werfen wir heute einen Blick auf die neuen Funktionen von PHP7.1 und PHP7.2.
Die Typdeklaration von Parametern und Rückgabewerten kann durch Hinzufügen eines Fragezeichens vor dem Typnamen erfolgen ( ?
), um es als null zu markieren. Gibt an, dass der Typ des Funktionsparameters oder Rückgabewerts entweder der angegebene Typ oder null ist.
Sehen Sie sich das Beispiel an:
function testReturn(?string $name){ return $name; } var_dump(testReturn('yangyi')); var_dump(testReturn(null)); var_dump(testReturn2());
Druckausgabe:
$ php php71.phpstring(6) "yangyi"NULL PHP Fatal error: Uncaught ArgumentCountError: Too few arguments to function testReturn(), 0 passed in php71.php on line 22 and exactly 1 expected in php71.php:14Stack trace:#0 php71.php(22): testReturn()#1 {main} thrown in php71.php on line 14
Das Gleiche wie oben: Der Dritte hat einen schwerwiegenden Fehler gemeldet.
Schauen wir uns den Fall an, in dem der Rückgabewert der Funktion Nullable
ist:
function testReturn3() : ?string{ //return "abc"; //return null;} var_dump(testReturn3());
Wenn ?
hinzugefügt wird, wird entweder eine Zeichenfolge oder Null zurückgegeben. Sie können nichts zurückgeben. Es wird ein Fehler gemeldet.
PHP7.0 hat die Funktion zur Angabe des Funktionsrückgabetyps hinzugefügt, aber der Rückgabetyp kann nicht als void angegeben werden. Diese Funktion von 7.1 ist eine Ergänzung. Eine mit dem Rückgabetyp void
definierte Funktion kann keinen Rückgabewert haben, auch wenn sie null zurückgibt:
function testReturn4() : void{ //1. 要么啥都不返还 ok //2. 要么只return; ok //return; //3. return null 也会报错 //return null; //4. return 4 会报错 //return 4;}
Fatal error: A void function must not return a value in /php71.php on line 70
Außerdem kann void nur für Rückgabewerte und nicht für Parameter verwendet werden. Folgendes meldet beispielsweise einen Fehler:
function testReturn6(void $a) : void{} var_dump(testReturn6());
PHP Fatal error: void cannot be used as a parameter type in php71.php on line 73
Wenn eine Methode in der Klassenvererbung als void-Rückgabetyp deklariert ist und die Unterklasse ihn erbt und überschreibt, kann sie nur void zurückgeben , andernfalls wird ein Fehler ausgelöst. :
<?php class Foo{ public function bar(): void { } }class Foobar extends Foo{ // 覆盖失败 public function bar(): array { // Fatal error: Declaration of Foobar::bar() must be compatible with Foo::bar(): void } }
Sie müssen dies also tun, und Sie erhalten keinen Fehler:
class Foo{ public $a; public function bar(): void { $this->a = 2; } }class Foobar extends Foo{ // 覆盖成功 public function bar(): void { $this->a = 3; } }
[]
) Abkürzung und fügen Sie den angegebenen Schlüssel hinzuSie können die Liste verwenden, um schnell zu durchlaufen, um die Werte im Array abzurufen. Die Abkürzung []
kann nun verwendet werden.
$data = [ [1, 'Tom'], [2, 'Fred'], ];// list() stylelist($id1, $name1) = $data[0];// [] style[$id1, $name1] = $data[0]; // list() styleforeach ($data as list($id, $name)) { // logic here with $id and $name} // [] styleforeach ($data as [$id, $name]) { // logic here with $id and $name}
Darüber hinaus kann diese aktualisierte Liste auch einen Schlüssel für das Indexarray angeben. Dieses Upgrade ist großartig und sehr praktisch.
$data = [ ["id" => 1, "name" => 'Tom'], ["id" => 2, "name" => 'Fred'], ];// list() stylelist("id" => $id1, "name" => $name1) = $data[0]; // [] style["id" => $id1, "name" => $name1] = $data[0]; // list() styleforeach ($data as list("id" => $id, "name" => $name)) { // logic here with $id and $name}// [] styleforeach ($data as ["id" => $id, "name" => $name]) { // logic here with $id and $name}
Bevor diese Funktion nicht verfügbar war, haben wir normalerweise while
+ each
verwendet, um das Indexarray mit list
zu durchlaufen:
$data = [ ["id" => 1, "name" => 'Tom'], ["id" => 2, "name" => 'Fred'], ];while (list($id, name) = each($data)) { echo "$key => $val\n"; }
Hinweis: Die Each-Funktion wurde in PHP 7.2 entfernt! Verwenden Sie diese Methode daher nicht zum Durchlaufen des Indexarrays
Die Konstanten in der Klasse wurden zuvor mit const
deklariert, und das waren sie auch nicht sichtbares Attribut. Jetzt werden die sichtbaren Attribute der Methode übertragen:
<?php class ConstDemo { // 常量默认为 public const PUBLIC_CONST = 0; // 可以自定义常量的可见范围 public const PUBLIC_CONST_B = 2; protected const PROTECTED_CONST = 3; private const PRIVATE_CONST = 4; // 多个常量同时声明只能有一个属性 private const FOO = 1, BAR = 2; }
Die Verwendungsmethode ist dieselbe wie die Methode der Klasse. Ich werde nicht auf Details eingehen.
Es gibt 2 Aktualisierungen, 1 dient dazu, den String direkt zu übernehmen, 2 ist, dass der dritte Parameter der strpos-Funktion negative Zahlen unterstützt. Zeigt das Nehmen vom Schwanz an.
var_dump("abcdef"[-2]); // evar_dump(strpos("aabbcc", "b", -3)); //3
string变量可以直接取值,不用通过变量名,是在php5.5加入的。现在可以从尾部取:
var_dump("abcdef"[-2]); // 从末尾取倒数第2个字符:evar_dump("abcdef"[2]); // 从前面取第2个,从0开始:c$string = 'bar';echo $string[1], $string[-1]; // a r
在以往的 try … catch 语句中,每个 catch 只能设定一个条件判断:
try { // Some code...} catch (ExceptionType1 $e) { // 处理 ExceptionType1} catch (ExceptionType2 $e) { // 处理 ExceptionType2} catch (Exception $e) { // ...}
现在可以多个一起处理。用”|
” 分割。
try { // Some code... } catch (ExceptionType1 | ExceptionType2 $e) { // 对于 ExceptionType1 和 ExceptionType2 的处理 } catch (Exception $e) { // ...}
php 7.2大都是底层的更新,提高性能。没有太大常用语法层面的更新,这里就略过了。
相关推荐:
Das obige ist der detaillierte Inhalt vonDetaillierte Beispiele für neue Funktionen in PHP7.1 und 7.2. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!