Dieser Artikel stellt hauptsächlich die neu hinzugefügten Funktionen von PHP 7 vor, die einen gewissen Referenzwert haben. Jetzt kann ich ihn mit allen Freunden teilen, die ihn benötigen.
Skalare Typdeklaration
Die formale Parametertypdeklaration von Funktionen in PHP 7 kann jetzt skalar sein. In PHP 5 können nur Klassenname, Schnittstelle, Array oder aufrufbar sein (PHP5.4, das heißt, es kann eine Funktion sein, einschließlich anonymer Funktion ), jetzt können Sie auch Zeichenfolge verwenden, int, float und bool auch.
<?php // 强制模式 function sumOfInts(int...$ints) { return array_sum($ints); } var_dump(sumOfInts(2,'3',4.1));
Das obige Beispiel gibt Folgendes aus:
int(9)
Es ist zu beachten, dass das oben erwähnte Problem des strikten Modus auch hier gilt: Im erzwungenen Modus (Standard, der eine erzwungene Typkonvertierung ist) wird es immer noch Fehler geben, die dies tun Die Parameter werden zur Typkonvertierung gezwungen und im strikten Modus wird ein schwerwiegender Fehler vom Typ TypeError ausgelöst.
Rückgabewerttypdeklaration
PHP 7 Unterstützung für Rückgabetypdeklarationen hinzugefügt. Ähnlich wie die Parametertypdeklaration gibt die Rückgabetypdeklaration den Typ des Funktionsrückgabewerts an. Die verfügbaren Typen sind dieselben wie die in der Parameterdeklaration verfügbaren.
<?php function arraysSum(array ...$arrays): array { return array_map(function(array $array):int{ return array_sum($array); }, $arrays); } print_r(arraysSum([1,2,3],[4,5,6],[7,8,9]));
Das obige Beispiel gibt Folgendes aus:
Array ( [0]=>6 [1]=>15 [2]=>24 )
NULL Verschmelzungsoperator
Aufgrund der großen Anzahl gleichzeitiger Verwendungen ternärer Ausdrücke und wird eingesetzt täglicher Gebrauch Im Fall von () sorgt der Zusammenführungsoperator NULL dafür, dass die Variable existiert und der Wert nicht NULL< ist 🎜>, Es gibt seinen eigenen Wert zurück, andernfalls gibt es seinen zweiten Operanden zurück.
Beispiele sind wie folgt:
<?php // 如果 $_GET['user'] 不存在返回 'nobody',否则返回 $_GET['user'] 的值 $username = $_GET['user']??'nobody'; // 类似的三元运算符 $username = isset($_GET['user'])? $_GET['user']:'nobody'; ?>
Raumschiff-Operator (Kombinationsvergleichsoperator)
Der Raumschiff-Operator wird verwendet, um zwei Ausdrücke zu vergleichen. Wenn $a größer, gleich oder kleiner als $b ist, wird jeweils -1< zurückgegeben 🎜>, 0 oder 1.
Beispiele sind wie folgt:<?php
// 整型
echo 1<=>1;// 0
echo 1<=>2;// -1
echo 2<=>1;// 1
// 浮点型
echo 1.5<=>1.5;// 0
echo 1.5<=>2.5;// -1
echo 2.5<=>1.5;// 1
// 字符串
echo "a"<=>"a";// 0
echo "a"<=>"b";// -1
echo "b"<=>"a";// 1
?>
Konstantes Array definieren bis define()
Das Beispiel lautet wie folgt: <?php
define('ANIMALS',[
'dog',
'cat',
'bird'
]);
echo ANIMALS[1];// 输出 "cat"
?>
Anonyme Klasse
wird jetzt unterstützt Übergeben vonneue Klasse , um eine anonyme Klasse zu instanziieren. Das Beispiel lautet wie folgt: 以上实例会输出: Unicode codepoint 转译语法 这接受一个以16进制形式的 Unicodecodepoint,并打印出一个双引号或heredoc包围的 UTF-8 编码格式的字符串。可以接受任何有效的 codepoint,并且开头的 0 是可以省略的。 以上实例会输出: Closure::call() Closure::call() 现在有着更好的性能,简短干练的暂时绑定一个方法到对象上闭包并调用它。 以上实例会输出: 为unserialize()提供过滤 这个特性旨在提供更安全的方式解包不可靠的数据。它通过白名单的方式来防止潜在的代码注入。 IntlChar 新增加的 IntlChar 类旨在暴露出更多的 ICU 功能。这个类自身定义了许多静态方法用于操作多字符集的 unicode 字符。 以上实例会输出: 若要使用此类,请先安装Intl扩展 预期 预期是向后兼用并增强之前的 assert() 的方法。它使得在生产环境中启用断言为零成本,并且提供当断言失败时抛出特定异常的能力。 以上实例会输出: use 加强 从同一 namespace 导入的类、函数和常量现在可以通过单个 use 语句一次性导入了。 Generator 加强 增强了Generator的功能,这个可以实现很多先进的特性 以上实例会输出: 整除 新增了整除函数 intp(),使用实例: 以上实例会输出: 相关推荐: Das obige ist der detaillierte Inhalt vonNeue Funktionen in PHP 7 hinzugefügt. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!<?php
interfaceLogger{
publicfunction log(string $msg);
}
classApplication{
private $logger;
publicfunction getLogger():Logger{
return $this->logger;
}
publicfunction setLogger(Logger $logger){
$this->logger = $logger;
}
}
$app =newApplication;
$app->setLogger(newclassimplementsLogger{
publicfunction log(string $msg){
echo $msg;
}
});
var_dump($app->getLogger());
?>
object(class@anonymous)#2(0){
}
echo "\u{aa}";
echo "\u{0000aa}";
echo "\u{9999}";
ª
ª(same as before but with optional leading 0's)
香
<?php
class A {private $x =1;}
// Pre PHP7 代码
$getXCB =function(){return $this->x;};
$getX = $getXCB->bindTo(new A,'A');// intermediate closure
echo $getX();
// PHP 7+ 代码
$getX =function(){return $this->x;};
echo $getX->call(new A);
1
1
<?php
// 转换对象为 __PHP_Incomplete_Class 对象
$data = unserialize($foo,["allowed_classes"=>false]);
// 转换对象为 __PHP_Incomplete_Class 对象,除了 MyClass 和 MyClass2
$data = unserialize($foo,["allowed_classes"=>["MyClass","MyClass2"]);
// 默认接受所有类
$data = unserialize($foo,["allowed_classes"=>true]);
<?php
printf('%x',IntlChar::CODEPOINT_MAX);
echo IntlChar::charName('@');
var_dump(IntlChar::ispunct('!'));
10ffff
COMMERCIAL AT
bool(true)
<?php
ini_set('assert.exception',1);
classCustomErrorextendsAssertionError{}
assert(false,newCustomError('Someerror message'));
?>
Fatalerror:Uncaught CustomError:Some error message
<?php
// PHP 7 之前版本用法
use some\namespace\ClassA;
use some\namespace\ClassB;
use some\namespace\ClassC as C;
usefunction some\namespace\fn_a;
usefunction some\namespace\fn_b;
usefunction some\namespace\fn_c;
useconst some\namespace\ConstA;
useconst some\namespace\ConstB;
useconst some\namespace\ConstC;
// PHP 7+ 用法
use some\namespace\{ClassA,ClassB,ClassCas C};
usefunction some\namespace\{fn_a, fn_b, fn_c};
useconst some\namespace\{ConstA,ConstB,ConstC};
?>
<?php
<?php
function gen()
{
yield1;
yield2;
yieldfrom gen2();
}
function gen2()
{
yield3;
yield4;
}
foreach(gen()as $val)
{
echo $val, PHP_EOL;
}
?>
1
2
3
4
<?php
var_dump(intp(10,3));
?>
int(3)