ใน 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()