【发布时间】:2011-03-01 23:52:22
【问题描述】:
说明
PHP 的语法有一些漏洞,在开发过程中程序员偶尔会介入其中。这可能会导致很多挫败感,因为这些语法漏洞似乎无缘无故地存在。例如,不能轻易地创建一个数组并在同一行访问该数组的任意元素(func1()[100] 不是有效的 PHP 语法)。此问题的解决方法是使用临时变量并将语句分成两行,但有时这会导致代码非常冗长、笨拙。
挑战
我知道其中的一些漏洞(我相信还有更多)。甚至很难想出一个解决方案,更不用说代码高尔夫风格了。获胜者是所有四个语法孔中字符总数最少的人。
规则
- 声明必须是这种形式的一行:
$output = ...;,其中...不包含任何;。 - 仅使用标准库函数(不允许自定义函数或
eval) - 语句的工作方式与假定的非工作语法的功能相同(即使在它失败的情况下)。
- 使用
E_STRICT | E_ALL,语句必须在没有任何语法错误的情况下运行。
语法漏洞
-
$output = func_return_array()[$key];- 访问函数返回数组的任意偏移量(string或integer) -
$output = new {$class_base.$class_suffix}();- 用于创建新类的任意字符串连接 -
$output = {$func_base.$func_suffix}();- 任意字符串连接被调用为函数 -
$output = func_return_closure()();- 调用从另一个函数返回的闭包
【问题讨论】:
-
数组解引用(您的 1. 语法漏洞)已由 Felipe Pena 提交到主干。
-
@Artefacto 这真是个好消息!我听到的最后耳语是它被忽略了。你有那个链接吗?
-
我认为这个练习毫无意义。更少的字符不同于更清晰/更高效。
-
@Kendall Hopkins svn.php.net/viewvc?view=revision&revision=300266
-
只适用于 PHP?这不是代码高尔夫的真正精神,它通常与语言无关。
标签: php arrays function syntax code-golf