表达式语法
编辑该页面表达式语法
ExpressionLanguage组件使用一个特定的语法基于树枝的表达式语法。在本文档中,可以找到所有支持的语法。
支持文字
该组件支持:
- 字符串——单引号和双引号(例如。
“你好”
) - 数字——整数(如。
103年
),小数(如。9.95
没有前导零(如),小数。获得
,相当于0.99
);所有数字支持可选的下划线分隔符(如提高可读性。1 _000_000
,3.14159 _26535
) - 数组——使用类json符号(如。
[1,2]
) - 散列——使用类json符号(如。
{foo: '酒吧'}
) - 布尔值- - - - - -
真正的
和假
- 零- - - - - -
零
- 指数-也被称为科学(如。
1.99 e + 3
或1)依照
)
6.1
支持小数没有前导零和下划线分隔符在Symfony 6.1中引入的。ob娱乐下载
谨慎
一个反斜杠(\
)必须由4个反斜杠转义(
)在一个字符串和8反斜杠(
在正则表达式):
1 2
回声美元expressionLanguage- >评估(’“\ \ \ \”);/ /打印\美元expressionLanguage- >评估(“a \ \ \ \”匹配“/ ^ \ \ \ \ \ \ \ \ b /美元”的);/ /返回true
控制字符(如。\ n
)表达式替换为空格。为了避免这种情况,用一个反斜杠转义序列(如。\ \ n
)。
处理对象
当对象传递到一个表达式,可以使用不同的语法来访问属性和调用对象上的方法。
访问公共属性
可以通过使用访问对象的公共属性。
语法类似于JavaScript:
1 2 3 4 5 6 7 8 9 10 11 12 13 14
类苹果{公共字符串美元各种;}美元苹果=新苹果();美元苹果- >各种=“密脆”;var_dump (美元expressionLanguage- >评估(“fruit.variety”,(“水果”= >美元苹果)));
这将打印出密脆
。
调用方法
的。
语法也可以用来调用对象上的方法,类似于JavaScript:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
类机器人{公共函数sayHi(int美元次):字符串{美元问候= [];为(美元我=0;美元我<美元次;美元我+ +){美元问候[]=“嗨”;}返回内爆(' ',美元问候)。“!”;}}美元机器人=新机器人();var_dump (美元expressionLanguage- >评估(“robot.sayHi (3)”,(“机器人”= >美元机器人)));
这将打印出嗨嗨嗨!
。
空符
使用?。
语法来访问对象的属性和方法零
(这是等效的$对象? - > propertyOrMethod
PHP空符):
1 2 3 4 5 6 7
/ /将抛出一个异常时“水果”是“空”美元expressionLanguage- >评估(“fruit.color”,(“水果”= >“……”])美元expressionLanguage- >评估(“fruit.getStock ()”,(“水果”= >“……”])/ /将返回“零”如果“水果”是“空”美元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”)”));
这将打印出根
。
这也适用于类常量:
1 2 3 4 5 6 7 8 9 10
名称空间应用程序\SomeNamespace;类喷火{公共常量API_ENDPOINT =' / api ';}var_dump (美元expressionLanguage- >评估(常数(“应用程序\ \ \ SomeNamespace \ \ \ Foo:: API_ENDPOINT”)”));
这将打印出/ api
。
枚举()
函数
这个函数将返回一个枚举的情况下:
1 2 3 4 5 6 7 8 9 10
名称空间应用程序\SomeNamespace;enum Foo {情况下酒吧;}var_dump (App \ Enum \ Foo::酒吧= = =美元expressionLanguage- >评估(枚举(“应用程序\ \ \ SomeNamespace \ \ \ Foo::酒吧”)”));
这将打印出真正的
。
6.3
的枚举()
函数是在Symfony 6.3中引入的。ob娱乐下载
提示
阅读如何注册你自己的函数表达式中使用,请参阅“ExpressionLanguage组件”。
使用数组
如果你通过一个数组一个表达式,使用[]
类似于JavaScript语法来访问数组键:
1 2 3 4 5 6 7 8
美元数据= (“生活”= >10,“宇宙”= >10,“一切”= >22];var_dump (美元expressionLanguage- >评估(的数据(“生命”)(“宇宙”)+数据+数据(“一切”),(“数据”= >美元数据)));
这将打印出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- >评估(不(" foo "匹配" /酒吧/ ")”);/ /返回true
您必须使用括号,因为一元运算符不
在二元运算符优先级匹配
。
例子:
1 2 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”= >“亚瑟”,“姓”= >“削弱”)));
这将打印出亚瑟削弱
。
数组运算符
在
(包含)不是在
(不包含)
例如:
1 2 3 4 5 6 7 8 9 10 11 12 13 14
类用户{公共字符串美元集团;}美元用户=新用户();美元用户- >组=“human_resources”;美元派系=美元expressionLanguage- >评估(的用户。集团在["human_resources", "marketing"]',(“用户”= >美元用户]);
的美元的派系
将评估真正的
。
6.3
在Syob娱乐下载mfony版本6.3之前,在
和不是在
运营商使用宽松的比较。使用这些操作符和变量不同类型已经弃用,这些运营商从7.0 Symfony将使用严格的比较。ob娱乐下载
数字运算符
. .
(范围)
例如:
1 2 3 4 5 6 7 8 9 10 11 12 13 14
类用户{公共int美元年龄;}美元用户=新用户();美元用户- >年龄=34;美元expressionLanguage- >评估(的用户。年龄在18。。45',(“用户”= >美元用户]);
这将评估真正的
,因为user.age
在从吗18
来45
。
三元运算符
foo吗?“是的”:“不”
foo ?:“不”
(等于foo吗?喷火:“不”
)foo吗?“是的”
(等于foo吗?“是”:“
)
内置对象和变量
当使用该组件在一个Symfony应用程序中,某些对象和变量自动注入Syob娱乐下载mfony,这样你就可以在表达式中使用它们(例如请求,当前用户,等等):