dre*_*mac 2 php ruby comparison string-interpolation
在与常规使用php和ruby的同事进行代码审查之后,与ruby相比,php中的字符串插值有了一个有趣的挑战.
假设color ="orange";
红宝石:
puts("My favorite color is #{color.downcase() + 'ish'} -- at least for now.");
Run Code Online (Sandbox Code Playgroud)
PHP:
print("My favorite color is {strtolower( $color ) + 'ish'} -- at least for now.");
Run Code Online (Sandbox Code Playgroud)
挑战:任何人都可以指定一种方法来使PHP版本像Ruby一样吗?
这个挑战旨在作为一种有趣的练习,仅限于使用直接PHP.这不适用于严肃的PHP项目.对于严肃的PHP项目,开发人员需要考虑插件库,例如TWIG.
你很接近,你可以在字符串中嵌入变量,但不能在函数调用中嵌入变量.
我使用printf()
(和sprintf()
),这是一个围绕同名C函数的薄包装:
printf('My favorite color is %sish -- at least for now.', strtolower( $color ));
Run Code Online (Sandbox Code Playgroud)
看到%s
那里?这是您作为第二个参数传入的字符串数据类型的占位符.
sprintf()
以相同的方式工作,但它返回格式化的字符串而不是打印它.
唯一的其他选择是:
A.首先执行函数调用并将最终结果分配给变量:
$color = strtolower( $color );
print("My favorite color is {$color}ish -- at least for now.");
Run Code Online (Sandbox Code Playgroud)
B.使用连接,这是一个有点丑陋的IMO:
print('My favorite color is ' . strtolower( $color ) . 'ish -- at least for now.');
Run Code Online (Sandbox Code Playgroud)
您可能已经注意到我使用单引号(也称为刻度)和双引号.
在PHP中,双引号内的文字被解析为变量,如上面的"A"所示.
单引号内的文字不会被解析.因此,它们更快.作为一项规则,当有一个要解析的变量时,你应该只在文字周围使用双引号.
归档时间: |
|
查看次数: |
837 次 |
最近记录: |