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

ไวยากรณ์ตัวแปรสม่ำเสมอใน PHP 7


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

ไวยากรณ์ตัวแปรชุดเดียวกันจะประเมินตัวแปรจากซ้ายไปขวา เราจำเป็นต้องเพิ่มวงเล็บปีกกาเพื่อใช้ไวยากรณ์ตัวแปรชุดเดียวกัน ตัวอย่างเช่น

echo ${$first[‘name’]};

รูปแบบเดียวกันของตัวแปรช่วยให้สามารถใช้ตัวดำเนินการร่วมกันได้ และยังทำลายความเข้ากันได้แบบย้อนหลังในบางนิพจน์ไม่ว่าจะใช้การประเมินที่เก่ากว่า

ตัวอย่าง

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

ผลลัพธ์

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

10

หมายเหตุ: โปรแกรมข้างต้นจะเรียกใช้นิพจน์ฟังก์ชันทันที

วากยสัมพันธ์ของตัวแปรชุดเดียวกันใช้ชุดค่าผสมใหม่ของไวยากรณ์ที่มีอยู่ ตัวอย่างเช่น

$foo([‘bar’])();

วากยสัมพันธ์ของตัวแปรชุดเดียวกันสามารถละเลยอักขระในสตริงที่ส่งคืนโดยฟังก์ชันได้

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

ในบางกรณี PHP 7 รองรับโคลอนคู่ที่ซ้อนกัน (::),

$foo[‘bar’]::$baz;

วิธีการซ้อน/การเรียกใช้ฟังก์ชัน

เราสามารถใช้เมธอดที่ซ้อนกันและการเรียกใช้ฟังก์ชันหรือเรียกอะไรก็ได้เพื่อเพิ่มวงเล็บเป็นสองเท่า

ตัวอย่าง

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

การแสดงความเห็นตามอำเภอใจ

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

(exp) [‘foo’] ; // It will access an array key
(exp)->foo; // This will access the property
(exp)->foo(); // It will call to a method etc.

ตัวอย่าง

<?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()