表达式语法

编辑本页

表达式语法

ExpressionLanguage组件使用了基于Twig的表达式语法的特定语法。在本文档中,您可以找到所有受支持的语法。

支持文字

该组件支持:

  • 字符串-单引号和双引号(例如:“你好”
  • 数字——如。103
  • 数组-使用类似json的符号(例如:[1,2]
  • 散列-使用类似json的符号(例如:{foo: 'bar'}
  • 布尔值-真正的而且
  • -
  • 指数-也被称为科学的(例如:1.99 e + 31)依照

谨慎

反斜杠()必须用4个反斜杠()和8个反斜杠()的正则表达式:

1 2
回声expressionLanguage->评估(’“\ \ \ \”);//打印\expressionLanguage->评估(' ' a\\\\b ' '匹配' /^a\\\\\\\\b$/ ' ');//返回true

控制字符(例如:\ n)中的表达式被替换为空格。为了避免这种情况,使用一个反斜杠转义序列(例如。\ \ n).

使用对象

将对象传递到表达式时,可以使用不同的语法来访问对象的属性和调用方法。

进入公共物业

对象上的公共属性可以使用语法,类似于JavaScript:

12 3 4 5 6 7 8 9 10 11 12 13 14
苹果公共各种;}苹果苹果();苹果->各种=“密脆”;var_dump (expressionLanguage->评估(“fruit.variety”, (“水果”= >苹果,]));

这会打印出来密脆

调用方法

语法也可以用来调用一个对象的方法,类似于JavaScript:

12 3 4 5 6 7 8 9 10 11 12 13 14 16 17 18 19 20 21
机器人公共函数sayHi问候= [];0<+ +) {问候[] =“嗨”;}返回内爆(' '问候).“!”;}}机器人机器人();var_dump (expressionLanguage->评估(“robot.sayHi(3)”, (“机器人”= >机器人,]));

这会打印出来嗨嗨嗨!

使用函数

还可以使用与PHP和JavaScript相同的语法在表达式中使用注册函数。ExpressionLanguage组件默认带有一个函数:常数(),它将返回PHP常量的值:

1 2 3 4 5
定义(“DB_USER”“根”);var_dump (expressionLanguage->评估(“常数(“DB_USER”)”));

这会打印出来

提示

若要阅读如何注册要在表达式中使用的自己的函数,请参阅“扩展表达语言".

使用数组

如果将数组传递给表达式,请使用[]语法来访问数组键,类似于JavaScript:

1 2 3 4 5 6 7 8
数据= (“生活”= >10“宇宙”= >10“一切”= >22];var_dump (expressionLanguage->评估(data[“生命”]+ data[“宇宙”]+ data[“一切”], (“数据”= >数据,]));

这会打印出来42

支持运营商

该组件带有很多操作符:

算术运算符

  • +(添加)
  • -(减法)
  • (乘法)
  • /(部门)
  • (模量)
  • **(战俘)

例如:

1 2 3 4 5 6 7 8
var_dump (expressionLanguage->评估(“生命+宇宙+一切”, (“生活”= >10“宇宙”= >10“一切”= >22,]));

这会打印出来42

按位运算符

  • (和)
  • |(或)
  • (xor)

比较运算符

  • = =(等于)
  • = = =(相同)
  • ! =(不等于)
  • = = !(不一样的)
  • <(小于)
  • >(大于)
  • < =(小于或等于)
  • > =(大于等于)
  • 匹配(正则表达式匹配)

提示

来测试字符串是否存在匹配正则表达式,使用逻辑运算符与匹配接线员:

1
expressionLanguage->评估('not ("foo"匹配"/bar/")');//返回true

必须使用圆括号,因为一元操作符优先于二进制操作符匹配

例子:

12 3 4 5 6 7 8 9 10 11 12 13 14 15
ret1expressionLanguage->评估(“生命=一切”, (“生活”= >10“一切”= >22,]);ret2expressionLanguage->评估(“生活>一切”, (“生活”= >10“一切”= >22,]);

两个变量都被设为

逻辑运算符

  • 而且& &
  • ||

例如:

1 2 3 4 5 6 7 8
受潮湿腐烂expressionLanguage->评估(生命<宇宙或生命<一切, (“生活”= >10“宇宙”= >10“一切”= >22,]);

美元受潮湿腐烂变量将被设置为真正的

字符串运算符

  • (连接)

例如:

1 2 3 4 5 6 7
var_dump (expressionLanguage->评估(“姓~ " ~名”, (“firstName”= >“亚瑟”“姓”= >“削弱”,]));

这会打印出来亚瑟削弱

数组运算符

  • (包含)
  • 不是在(不包含)

例如:

12 3 4 5 6 7 8 9 10 11 12 13 14
用户公共集团;}用户用户();用户->组=“human_resources”派系expressionLanguage->评估(的用户。集团在["human_resources", "marketing"]', (“用户”= >用户,]);

美元的派系会计算为真正的

数字运算符

  • ..(范围)

例如:

12 3 4 5 6 7 8 9 10 11 12 13 14
用户公共年龄;}用户用户();用户->年龄=34expressionLanguage->评估(的用户。年龄在18..45', (“用户”= >用户,]);

它的值是真正的,因为user.age在范围内1845

三元运算符

  • foo吗?“是”:“不是”
  • Foo ?: 'no'(等于foo吗?Foo:“不”
  • foo吗?“是的”(等于foo吗?“是的”。

内置对象和变量

当在Symfony应用程序中使用这个组件时,某些对象和变量会被Symf欧宝娱乐app下载地址ony自动注入,这样你就可以在你的表达式中使用它们(例如请求,当前用户等):

此工作,包括代码示例,是根据创作共用BY-SA 3.0许可证。
欧宝娱乐app下载地址Symfony 5.4支持通过私人Packagist