Symfony - 表达式

正如我们之前所讨论的,表达式语言是 Symfony 应用程序的显著特点之一。Symfony 表达式主要用于配置环境。它使非程序员能够轻松配置 Web 应用程序。让我们创建一个简单的应用程序来测试表达式。

步骤 1 − 创建一个项目,expression-language-example

cd /path/to/dir
mkdir expression-language-example
cd expression-language-example
composer require symfony/expression-language

步骤 2 −创建一个表达式对象。

use Symfony\Component\ExpressionLanguage\ExpressionLanguage;
$language = new ExpressionLanguage();

步骤 3 − 测试一个简单的表达式。

echo "Evaluated Value: " . $language->evaluate('10 + 12') . "
" ;
echo "Compiled Code: " . $language->compile('130 % 34') . "
" ;

步骤 4 − Symfony 表达式功能强大,它可以在表达式语言中拦截 PHP 对象及其属性。

class Product { 
   public $name; 
   public $price; 
} 
$product = new Product(); 
$product->name = 'Cake'; 
$product->price = 10;  

echo "Product price is " . $language 
   ->evaluate('product.price', array('product' => $product,)) . "
";  
echo "Is Product price higher than 5: " . $language 
   ->evaluate('product.price > 5', array('product' => $product,)) . "
"; 

此处,表达式 product.priceproduct.price > 5 截取 $product 对象的属性 price 并计算结果。

完整代码如下。

main.php

<?php 
   require __DIR__ . '/vendor/autoload.php'; 
   use Symfony\Component\ExpressionLanguage\ExpressionLanguage; 
   $language = new ExpressionLanguage();  

   echo "Evaluated Value: " . $language->evaluate('10 + 12') . "
" ; 
   echo "Compiled Code: " . $language->compile('130 % 34') . "
" ;  
   
   class Product { 
      public $name; 
      public $price; 
   }  
   $product = new Product(); 
   $product->name = 'Cake'; 
   $product->price = 10;  

   echo "Product price is " . $language 
      ->evaluate('product.price', array('product' => $product,)) . "
"; 
   echo "Is Product price higher than 5: " . $language 
      ->evaluate('product.price > 5', array('product' => $product,)) . "
"; 
?> 

结果

Evaluated Value: 22 
Compiled Code: (130 % 34) 
Product price is 10 
Is Product price higher than 5: 1