Heim > Backend-Entwicklung > PHP7 > Hauptteil

Werfen wir einen Blick auf die neuen Funktionen von PHP7

coldplay.xixi
Freigeben: 2023-02-17 16:06:01
nach vorne
3411 Leute haben es durchsucht

Werfen wir einen Blick auf die neuen Funktionen von PHP7

1. PHP-Skalartyp- und Rückgabewerttypdeklaration

2. PHP-Raumschiffoperationssymbol ( kombiniertes Vergleichssymbol)

4. PHP-Konstanten-Array

5. PHP-Closure::call()

7 , PHP filter unserialize()

8, PHP IntlChar()

9, PHP CSPRNG

10, PHP 7-Ausnahme

11, PHP 7 use Statement

12. PHP 7-Fehlerbehandlung

14. PHP 7-Sitzungsoption

15. PHP 7 veraltete Funktionen

16. Erweiterungen durch PHP 7 entfernt

17. SAPI durch PHP 7 entfernt

Skalartyp- und Rückgabewerttypdeklaration von PHP

Skalare Typdeklaration

Erzwungener Modus
  • declare(strict_types=1)
      <?php 
    // 强制模式 
    function sum(int ...$ints) 
    { 
       return array_sum($ints); 
    } 
    print(sum(2, &#39;3&#39;, 4.1)); 
    ?>
    
    以上程序执行输出结果为:
    
    9复制代码
    Nach dem Login kopieren

    Strikter Modus
  • <?php 
    
    declare(strict_types=1); 
    
    function sum(int ...$ints) 
    { 
       return array_sum($ints); 
    } 
    
    print(sum(2, &#39;3&#39;, 4.1)); 
    ?>
    以上程序由于采用了严格模式,所以如果参数中出现不适整数的类型会报错,执行输出结果为:
    
    PHP Fatal error:  Uncaught TypeError: Argument 2 passed to sum() must be of the type integer, string given, called in……复制代码
    Nach dem Login kopieren
    PHP NULL-Koaleszenzoperator

  • Vorherige ternäre Operation

  $site = isset($_GET['site']) ? $_GET['site'] : '菜鸟教程';复制代码
Nach dem Login kopieren
  • Der aktuelle Zusammenführungsoperator

  $site = $_GET['site'] ?? '菜鸟教程';复制代码
Nach dem Login kopieren
  • Die beiden oben genannten Methoden sind gleich

    Das Folgende sind Beispiele :
  •     <?php
    // 获取 $_GET[&#39;site&#39;] 的值,如果不存在返回 &#39;高压锅&#39;$site = $_GET[&#39;site&#39;] ?? &#39;高压锅&#39;;print($site);print(PHP_EOL); // PHP_EOL 为换行符
    
    
    // 以上代码等价于$site = isset($_GET[&#39;site&#39;]) ? $_GET[&#39;site&#39;] : &#39;高压锅&#39;;print($site);print(PHP_EOL);
    // ?? 链$site = $_GET[&#39;site&#39;] ?? $_POST[&#39;site&#39;] ?? &#39;高压锅&#39;;print($site);
    ?>复制代码
    Nach dem Login kopieren
  • Kombinierter Vergleichsoperator, auch bekannt als Raumschiffoperator
  • PHP 7 neu hinzugefügter Raumschiffoperator (Der kombinierte Vergleichsoperator) wird zum Vergleichen zweier Ausdrücke verwendet $a und $b. Wenn $a kleiner, gleich oder größer als $b ist, wird jeweils -1, 0 oder 1 zurückgegeben.

Das Folgende ist ein Beispiel

<?php
// 整型比较print( 1 <=> 1);print(PHP_EOL);print( 1 <=> 2);print(PHP_EOL);print( 2 <=> 1);print(PHP_EOL);print(PHP_EOL); // PHP_EOL 为换行符

// 浮点型比较print( 1.5 <=> 1.5);print(PHP_EOL);print( 1.5 <=> 2.5);print(PHP_EOL);print( 2.5 <=> 1.5);print(PHP_EOL);print(PHP_EOL);

// 字符串比较print( "a" <=> "a");print(PHP_EOL);print( "a" <=> "b");print(PHP_EOL);print( "b" <=> "a");print(PHP_EOL);
?>复制代码
Nach dem Login kopieren
    以上结果分别为复制代码
Nach dem Login kopieren
0
-1
1

0
-1
1

0
-1
1复制代码
Nach dem Login kopieren
PHP-Konstantenarray

Zuvor definierte Konstantenarrays können nur const
;

  • Um nun ein konstantes Array zu definieren, können Sie

    define();

  • verwenden

    Das Folgende ist ein Beispiel:

    // 使用 define 函数来定义数组
    define('sites', [   'Google',   'Runoob',   'Taobao']);print(sites[1]);
    ?>
    以上程序执行输出结果为:
    
    Runoob复制代码
    Nach dem Login kopieren
    PHP Anonymous Class

PHP 7 unterstützt die Instanziierung einer anonymen Klasse durch eine neue Klasse, die zum Ersetzen verwendet werden kann einige „Nachbenutzung“ Die vollständige Klassendefinition von „brennen“.

Das Folgende ist ein Beispiel:
  •         <?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; 
            // 使用 new class 创建匿名类 
            $app->setLogger(new class implements Logger { 
               public function log(string $msg) { 
                  print($msg); 
               } 
            }); 
    
            $app->getLogger()->log("我的第一条日志"); 
            ?>
    以上程序执行输出结果为:
    
    我的第一条日志复制代码
    Nach dem Login kopieren
    php Closure::call()
  • PHP 7 Das
  • hat eine bessere Leistung, da es eine Abschlussfunktion dynamisch an eine neue Objektinstanz bindet und die Funktion aufruft und ausführt.

实例
<?php 
class A { 
    private $x = 1; 
} 

// PHP 7 之前版本定义闭包函数代码 
$getXCB = function() { 
    return $this->x; 
}; 

// 闭包函数绑定到类 A 上 
$getX = $getXCB->bindTo(new A, 'A');  

echo $getX(); 
print(PHP_EOL); 

// PHP 7+ 代码 
$getX = function() { 
    return $this->x; 
}; 
echo $getX->call(new A); 
?>
以上程序执行输出结果为:
1
1复制代码
Nach dem Login kopieren
    PHP filter unserialize()
  • Closure::call()

    PHP 7 fügt eine Funktion hinzu, die eine Filterung für
  • ermöglichen kann, um zu verhindern, dass illegale Daten kodiert werden Injektion sorgt für eine sicherere Deserialisierung von Daten.

实例
<?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); 

// 默认行为是接收所有类 
// 第二个参数可以忽略 
// 如果 allowed_classes 设置为 false, unserialize 会将所有对象转换为 __PHP_Incomplete_Class 对象 
$data = unserialize($serializedObj1 , ["allowed_classes" => true]); 

// 转换所有对象到 __PHP_Incomplete_Class 对象,除了 MyClass1 和 MyClass2 
$data2 = unserialize($serializedObj2 , ["allowed_classes" => ["MyClass1", "MyClass2"]]); 

print($data->obj1prop); 
print(PHP_EOL); 
print($data2->obj2prop); 
?>
以上程序执行输出结果为:
1
2复制代码
Nach dem Login kopieren
  • Beachten Sie, dass die oben genannten Funktionen eine zusätzliche Parameterauswahl in unserialize()

    allowed_classes
< haben 🎜 >PHP CSPRNG Pseudo-Zufallszahlengenerator

unserialize()CSPRNG (Cryptographically Secure Pseudo-Random Number Generator, Pseudozufallszahlengenerator).

PHP 7 bietet einen einfachen Mechanismus zum Generieren kryptografisch starker Zufallszahlen durch die Einführung mehrerer CSPRNG-Funktionen.

  • random_bytes() – Kryptografisch geschützte pseudozufällige Zeichenfolge.
  • random_int() – Kryptografisch geschützte pseudozufällige Ganzzahl.

Zusammenfassend ist es dem Original
und 'mt_rand()' ähnlich, außer dass random_bytes() jetzt eine Zufallszeichenfolge

generiert

php7-Ausnahmen
  • rand()PHP 7-Ausnahmen werden zur Abwärtskompatibilität und Verbesserung alter

    -Funktionen verwendet. Es ermöglicht kostenlose Behauptungen in Produktionsumgebungen und bietet die Möglichkeit, benutzerdefinierte Ausnahmen und Fehler auszulösen.

Alte Versionen der API werden aus Kompatibilitätsgründen weiterhin beibehalten.
  • assert()assert() ist jetzt ein Sprachkonstrukt, das es ermöglicht, dass das erste Argument ein Ausdruck ist und nicht nur eine auszuwertende Zeichenfolge oder ein zu testender boolescher Wert.

  • assert()的应用  跟assert_option() 配合复制代码
    Nach dem Login kopieren

    Auch Parametertyp

  • **参数**
    assertion
    断言。在 PHP 5 中,是一个用于执行的字符串或者用于测试的布尔值。在 PHP 7 中,可以是一个返回任何值的表达式, 它将被执行结果用于指明断言是否成功。
    description
    如果 assertion 失败了,选项 description 将会包括在失败信息里。
    exception
    在 PHP 7 中,第二个参数可以是一个 Throwable 对象,而不是一个字符串,如果断言失败且启用了 assert.exception 该对象将被抛出
    
    实例
    将 zend.assertions 设置为 0:
    实例
    <?php 
    ini_set(&#39;zend.assertions&#39;, 0); 
    
    assert(true == false); 
    echo &#39;Hi!&#39;; 
    ?>
    以上程序执行输出结果为:
    Hi!
    将 zend.assertions 设置为 1,assert.exception 设置为 1:
    实例
    <?php 
    ini_set(&#39;zend.assertions&#39;, 1); 
    ini_set(&#39;assert.exception&#39;, 1); 
    
    assert(true == false); 
    echo &#39;Hi!&#39;; 
    ?>
    以上程序执行输出结果为:
    Fatal error: Uncaught AssertionError: assert(true == false) in -:2
    Stack trace:#0 -(2): assert(false, &#39;assert(true == ...&#39;)#1 {main}
      thrown in - on line 2复制代码
    Nach dem Login kopieren

    PHP 7 use 语句

    • PHP 7 可以使用一个 use 从同一个 namespace 中导入类、函数和常量:

    // PHP 7 之前版本需要使用多次 use 
    use some\namespace\ClassA; 
    use some\namespace\ClassB; 
    use some\namespace\ClassC as C; 
    use function some\namespace\fn_a; 
    use function some\namespace\fn_b; 
    use function some\namespace\fn_c; 
    use const some\namespace\ConstA; 
    use const some\namespace\ConstB; 
    use const some\namespace\ConstC; 
    // PHP 7+ 之后版本可以使用一个 use 导入同一个 namespace 的类 
    use some\namespace\{ClassA, ClassB, ClassC as C}; 
    use function some\namespace\{fn_a, fn_b, fn_c}; 
    use const some\namespace\{ConstA, ConstB, ConstC}; 
    ?>
    Nach dem Login kopieren

    推荐教程:《php教程

    Das obige ist der detaillierte Inhalt vonWerfen wir einen Blick auf die neuen Funktionen von PHP7. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
Quelle:juejin.im
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!