表达式语法
编辑本页表达式语法
ExpressionLanguage组件使用了基于Twig的表达式语法的特定语法。在本文档中,您可以找到所有受支持的语法。
支持文字
该组件支持:
- 字符串-单引号和双引号(例如:
“你好”
) - 数字-整数(例如:
103
)、小数(例如:9.95
)、不带前导零的小数(例如:获得
,相当于0.99
);所有数字都支持可选的下划线作为分隔符,以提高可读性(例如:1 _000_000
,3.14159 _26535
) - 数组-使用类似json的符号(例如:
[1,2]
) - 散列-使用类似json的符号(例如:
{foo: 'bar'}
) - 布尔值-
真正的
而且假
- 零-
零
- 指数-也被称为科学的(例如:
1.99 e + 3
或1)依照
)
6.1
Symfony 6.1中引入了对不带前导零的小数和下划线分隔符的支持。ob娱乐下载
谨慎
反斜杠(\
)必须用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)”, (“机器人”= >$机器人,]));
这会打印出来嗨嗨嗨!
.
空符
使用?.
语法来访问对象的属性和方法零
(这相当于美元的对象?->propertyOrMethod
PHP空安全操作符):
1 2 3 4 5 6 7
//当' fruit '为' null '时抛出异常$expressionLanguage->评估(“fruit.color”, (“水果”= >“……”])$expressionLanguage->评估(“fruit.getStock()”, (“水果”= >“……”])//如果fruit为null,则返回null$expressionLanguage->评估(“水果吗? .color”, (“水果”= >“……”])$expressionLanguage->评估(“水果? .getStock()”, (“水果”= >“……”])
6.1
空安全操作符是在Symfony 6.1中引入的。ob娱乐下载
使用函数
还可以使用与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)
比较运算符
= =
(等于)===
(相同)! =
(不等于)= = !
(不一样的)<
(小于)>
(大于)< =
(小于或等于)> =
(大于等于)匹配
(正则表达式匹配)包含
开始于
结尾
6.1
的包含
,开始于
而且结尾
操作符是在Symfony 6.1中引入的。ob娱乐下载
提示
来测试字符串是否存在不匹配正则表达式,使用逻辑不
运算符与匹配
接线员:
1
$expressionLanguage->评估('not ("foo"匹配"/bar/")');//返回true
必须使用圆括号,因为一元操作符不
优先于二进制操作符匹配
.
例子:
12 3 4 5 6 7 8 9 10 11 12 13 14 15
$ret1=$expressionLanguage->评估(“生命=一切”, (“生活”= >10,“一切”= >22,]);$ret2=$expressionLanguage->评估(“生活>一切”, (“生活”= >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
类用户{公共$年龄;}$用户=新用户();$用户->年龄=34;$expressionLanguage->评估(的用户。年龄在18..45', (“用户”= >$用户,]);
它的值是真正的
,因为user.age
在范围内18
来45
.
三元运算符
foo吗?“是”:“不是”
Foo ?: 'no'
(等于foo吗?Foo:“不”
)foo吗?“是的”
(等于foo吗?“是的”。
)
内置对象和变量
当在Symfony应用程序中使用这个组件时,某些对象和变量会被Symfob娱乐下载ony自动注入,这样你就可以在你的表达式中使用它们(例如请求,当前用户等):