Php 细枝假设标点/字符串,小数点前面没有数字值?
考虑以下几点:Php 细枝假设标点/字符串,小数点前面没有数字值?,php,symfony,types,twig,Php,Symfony,Types,Twig,考虑以下几点: A) {{ form.vars.attr.dimensions.width * .1875 }} B) {{ form.vars.attr.dimensions.width * 0.1875 }} 其中form.vars.attr.dimensions.width是一个整数 下面是form.vars.attr.dimensions的转储 array:2 [ "width" => 1600 "height" => 478 ] 示例A将引发以下异常: 值“”的
A) {{ form.vars.attr.dimensions.width * .1875 }}
B) {{ form.vars.attr.dimensions.width * 0.1875 }}
其中form.vars.attr.dimensions.width
是一个整数
下面是form.vars.attr.dimensions
的转储
array:2 [
"width" => 1600
"height" => 478
]
示例A将引发以下异常:
值“”的意外标记“标点符号”
示例B工作正常并输出300.0
我知道它很可能将值解释为字符串,但我的问题是为什么?我认为既然它是无引号的,就不应该被看作是字面意思。我意识到我可以用数字格式、前面的零等来解决这个问题。我只是真的很好奇为什么Twig不能正确识别那个十进制数。或者我错过了别的什么
此外,香草PHP中应用的相同逻辑不会产生这种情况:
<?php
$val = 1600;
var_dump($val * .1875);
// float(300)
?>
在模板呈现的第一步中,.1875
中的
已被标识为标点符号
细枝文档在中介绍了此过程。第一步:
lexer将模板源代码标记为标记流
在文档部分,它展示了将一些源代码转换为令牌流的方法。如果我们用你的两个例子:
$ex1 = '{{ form.vars.attr.dimensions.width * 0.1875 }}';
$ex2 = '{{ form.vars.attr.dimensions.width * .1875 }}';
$stream1 = $twig->tokenize(new Twig_Source($ex1, 'example1'));
$stream2 = $twig->tokenize(new Twig_Source($ex2, 'example2'));
输出如下:
示例1:示例2:
VAR_START_TYPE()VAR_START_TYPE()
名称\类型(表格)名称\类型(表格)
标点符号类型(.)标点符号类型(.)
名称\类型(vars)名称\类型(vars)
标点符号类型(.)标点符号类型(.)
名称类型(attr)名称类型(attr)
标点符号类型(.)标点符号类型(.)
名称\类型(尺寸)名称\类型(尺寸)
标点符号类型(.)标点符号类型(.)
名称\类型(宽度)名称\类型(宽度)
运算符类型(*)运算符类型(*)
数字类型(0.1875)标点符号类型(.)很可能是因为实现了twig
。您可以在上看到完整的列表。您需要向下滚动一点以实现这正是我想要的。非常感谢您的详细解释!是的,这更像是一件好奇的事情,而不是试图找出任何解决办法。谢谢你!!不客气。谢谢你问了一个有趣的问题。:)
'/[0-9]+(?:\.[0-9]+)?/A'