Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> PHP

Uniform Variable Syntax ใน PHP 7

ใน PHP เวอร์ชันเก่า เราเจอปัญหา inconsistency ตัวอย่าง: ${$first ['name']} ไวยากรณ์นี้อาจสร้างความสับสน หรือพูดได้ว่า syntax ไม่สอดคล้องกัน เพื่อแก้ปัญหา inconsistency PHP 7 เพิ่ม syntax ใหม่ชื่อ "Uniform variable syntax"

Uniform variable syntax ประเมินตัวแปรจากซ้ายไปขวา เราต้องเพิ่มวงเล็บปีกกาเพื่อใช้ uniform variable syntax ตัวอย่าง

echo ${$first['name']};

Uniform variable syntax อนุญาตให้รวมตัวดำเนินการต่างๆ ได้ และยังสามารถทำลาย backward compatibility ในบางนิพจน์ที่ใช้การประเมินค่าแบบเก่า

ตัวอย่าง

<?php 
    $x = (function() { 
        return 20 - 10; 
    }) 
    (); 
    echo "$x\n"; 
?>

ผลลัพธ์

ผลลัพธ์สำหรับโปรแกรม PHP ด้านบนจะเป็น:

10

หมายเหตุ: โปรแกรมด้านบนจะเรียกใช้ function expression ทันที (immediately invoke)

Uniform variable syntax ใช้การรวม syntax ที่มีอยู่ใหม่ ตัวอย่าง

$foo(['bar'])();

Uniform variable syntax สามารถ dereference ตัวอักษรในสตริงที่คืนค่าจากฟังก์ชันได้

[$obj, $obj1] [0]->pro; 

ในบางกรณี PHP 7 รองรับ nested double colons (::)

$foo['bar']::$baz;

Nested Method/function calls

เราสามารถใช้ nested method และ function calls หรือ callable ใดๆ โดยการคูณวงเล็บ

ตัวอย่าง

foo()(); // return by a function callable
$foo->bar()(); // return by an instance method
Foo::bar()(); // static method
$foo()(); // return by another callable

Arbitrary Expression Dereferencing

ใน PHP เราสามารถ dereference นิพจน์ที่ถูกต้องใดๆ รวมถึงวงเล็บได้ ตัวอย่าง

(exp) ['foo'] ; // จะเข้าถึง array key
(exp)->foo; // จะเข้าถึง property
(exp)->foo(); // จะเรียกเมธอด ฯลฯ

ตัวอย่าง

<?php 
    function emp() { 
        echo "This is emp() \n"; 
    }; 
    function dept() { 
        echo "This is dept() \n"; 
        return emp; 
    }; 
    function sub() { 
        echo "This is sub()\n"; 
        return dept; 
    }; 
    sub(); 
    echo "----------------\n"; 
    sub()(); 
    echo "----------------\n"; 
    sub()()(); 
?>

ผลลัพธ์

ผลลัพธ์สำหรับโปรแกรมด้านบนจะเป็น -

This is sub() 
------------- 
This is sub() 
This is dept() 
------------- 
This is sub() 
This is dept() 
This is emp()