Php 假设串联困境

Php 假设串联困境,php,string,concatenation,Php,String,Concatenation,因此,我正在为PHP开发一种简单的微语言/替代语法。 它的语法从JavaScript和CoffeeScript中汲取了很多,包括我自己的一些概念。我已经用PHP手工编写了解析器(没有使用解析器生成器),将代码转换成PHP,然后执行它。它更像是一个概念验证/学习工具,而不是其他任何东西,但如果我说我不想有朝一日在实际项目中看到它的使用,那我就是在撒谎 总之,我遇到了一个小问题,我想我会把它强加给你们这些伟大的智者: 正如您所知,在PHP中,句点(.)用于字符串连接。但是在JavaScript中,它

因此,我正在为PHP开发一种简单的微语言/替代语法。 它的语法从JavaScript和CoffeeScript中汲取了很多,包括我自己的一些概念。我已经用PHP手工编写了解析器(没有使用解析器生成器),将代码转换成PHP,然后执行它。它更像是一个概念验证/学习工具,而不是其他任何东西,但如果我说我不想有朝一日在实际项目中看到它的使用,那我就是在撒谎

总之,我遇到了一个小问题,我想我会把它强加给你们这些伟大的智者:

正如您所知,在PHP中,句点(.)用于字符串连接。但是在JavaScript中,它用于方法链接

在PHP中,有一件事让我很恼火,那就是必须在我的方法链中使用那个该死的箭头(->),所以我采用JavaScript的方式,实现了用于对象的句号(.)

(我想你已经看到问题了)

因为我目前只编写一个“哑”解析器,它只进行大量的搜索和替换,所以无法区分句点(.)是用于连接还是用于方法链接

“所以,如果你想变得像JavaScript一样,只需使用加法(+)操作符Franky!”,我听到你尖叫。我会的,但因为加法(+)运算符在PHP中用于数学,我只会把自己放在同样的情况下

除非我能让我的解析器足够聪明(工作量很大),知道当加法(+)运算符处理整数时,不要将它转换成句点(.)来进行串联,否则我就完蛋了

但这里有一件很酷的事情。因为这几乎是一门新语言。我不必使用句点或加法运算符进行串联


所以我的问题是:如果我决定引入一种新的字符串连接方法,那么哪个字符最有意义呢?

如果你不想使用+or.,那么我推荐^。 编辑:有人指出它用于XOR。一个选项是无论如何使用^,因为按位异或并不常用,然后将其他类似于
^ ^
的东西映射到异或。另一种选择是使用
进行串联。问题是,大多数情况下都会使用单个字符

另一个选项是使用+,但将其映射到一个函数,该函数在一个参数为字符串时进行连接,否则进行添加。为了不破坏依赖于字符串的东西,这些字符串是被视为其值的数字,出于这些目的,我们可能应该将数字字符串视为数字。这是我将使用的函数

function smart_add($arg1,$arg2) {
    if ($arg1.is_numeric() && $arg2.is_numeric()) {
        return $arg1 + $arg2;
    } else {
        return $arg1 . $arg2;
    }
}
然后
a+b+c+d
就变成了
smart\u-add(smart\u-add)(smart\u-add(a,b,c),d)


这可能并非在所有情况下都是完美的,但它在大多数情况下都应该运行良好,并且有明确的使用规则。

它必须是一个字符吗<代码>。可以工作

任何无数的组合,如
~
>:
甚至

所以我的问题是:如果我决定引入一种新的 字符串串联,哪个字符最有意义

如您所知,您需要选择一个未用作PHP的字符。由于字符串连接是一种常见的技术,我会尽量避免使用需要按SHIFT键输入的字符,因为这些字符会成为一种障碍

与其尝试为字符串连接指定一个字符(因为大多数字符已经在使用中),不如将字符串连接(或需要使用其他运算符覆盖的任何其他操作)的语法定义为速记运算符(类似于)。比如:

[$string, $string]
解析器应该很容易识别并形成结果连接字符串

< > >编辑:我还应该注意,不管你使用的是字串还是变量,我都无法把这个语法和其他PHP功能混淆,因为中间的逗号对于数组操作来说是无效的。因此,以下所有内容仍将被识别为字符串连接,而不是PHP中的其他内容

编辑:由于这与JSON符号冲突,因此存在以下替代变体:

  • 更改分隔符
  • 省略分隔符
  • 例如:

    [$stack $overflow $string $concatenation] // Use nothing (but really need space)
    

    是接线员。啊,对不起,那么。我知道它在C、Java等语言中被用作XOR,但当我在谷歌上搜索php操作符列表时,我发现的页面忽略了这一点。我也有另一个更复杂的解决方案。稍后将通过编辑将其添加到帖子中。在我添加编辑之前,可能是对原始帖子投了反对票,这只是建议^。这并不像我想象的那么好,因为使用了^ for XOR(该死的webschools没有注意到他们的php操作符列表不完整)。我一直计划在答案中添加smart\u add code,但我花了一点时间才完成这部分。如果我选择保持传统的话,
    smart\u add()
    似乎是最好的选择。哇,这么多的选择,一周前竟然让我沮丧哦,真遗憾,但至少有人平衡了它!不能使用逗号,如何确定带字符串的函数调用是串联还是函数调用?i、 e.
    foo(“堆栈”、“溢出”、“堆栈溢出”)
    双周期
    实际上可以工作。无论我选择什么,它都会让我烦恼someone@FrankyChanyau这是真的,但这种语言是给你的!选择你想要的!看-我选择了我想要的操作符:)@FrankyChanyau还有你的姓是awesome只是不要选择像
    =[:>)+==我喜欢这样的东西。唯一的问题是我也用数组synt使用JavaScript
    
    [$stack $overflow $string $concatenation] // Use nothing (but really need space)