Echo 语言: PHP 生态下的另一个选择
## 概述
PHP 的变量沿袭 Perl 风格, 使用美元符号 `$` 作为变量的一部分, 使用 `.`作为连接字符串符。 按 Perl 的设计思想,使用点符号可以更清晰表示字符串 “连接” ,而不是像其他语言使用 `+` (算数运算)。 抛开设计哲学, 使用 `.` 连接字符串的一个弊端是访问属性使用箭头操作符 `->` , 这样的设计面向对象语言中很少见, 因为 OOP 中对属性的访问很频繁。
PHP 使用 `::` 来引用魔术常量, 类静态成员, 与其访问非静态成员的方式不一致。 优点是调用时很好区分静态成员。
PHP 存在着大量的魔术方法、 魔术常量
PHP 的变量没有块级作用于, 定义于 `for` `if` 等结构中的变量在外部仍能够使用。
PHP 定义函数和函数类型时, 都使用了 `function` 关键字, 定义闭包时又新增了 `fn` 关键字, 而函数类型声明又分为 `callable` 和 `Closure` 。换而言之, 函数并未成为 PHP 的一等公民。
作为弱类型语言, PHP 本身就是泛型的。 但 PHP 没有提供优秀的语法糖来处理类型。 `is_int()` , `is_string()` , `instanceof` 等函数返回布尔值, 无法流畅调用。
字符串与字节流没有区分, 导致使用多字节字符串需要使用 `mb_string` 拓展函数。
## 特性
+ 支持 JSX 风格语法来取代HiDoc 语法并提供 DOM解析与反射
### 变量
* 变量可以直接定义,不需要也不能使用 `$`
* 使用点 `.` 访问类属性(静态和非静态)
### 关键字
* 增加 `is` 关键字,类型判断, 返回布尔值。替代 `is_*`,`instanceof`
* 增加 `as` 关键字, 进行强制类型转换
* 删除 `foreach`, `while`, `do-while` 等循环关键字, 仅保留 `for` 循环并增加 `for ... in` 变体替代 `foreach`
* 删除 `extends` 和 `implements` 关键字, 使用`:` 替代 `class <name>: <parent-class>, <interface>`
* 删除 `new` 关键字, 直接使用类名函数创建对象
* 删除 `fn` 关键字, 直接使用闭包语法 `() => ...` x =\> …` () => { }`
## 结构
* 支持类内嵌套枚举(类的枚举)
概述
PHP 的变量沿袭 Perl 风格, 使用美元符号 $
作为变量的一部分, 使用 .
作为连接字符串符。 按 Perl 的设计思想,使用点符号可以更清晰表示字符串 “连接” ,而不是像其他语言使用 +
(算数运算)。 抛开设计哲学, 使用 .
连接字符串的一个弊端是访问属性使用箭头操作符 ->
, 这样的设计面向对象语言中很少见, 因为 OOP 中对属性的访问很频繁。
PHP 使用 ::
来引用魔术常量, 类静态成员, 与其访问非静态成员的方式不一致。 优点是调用时很好区分静态成员。
PHP 存在着大量的魔术方法、 魔术常量
PHP 的变量没有块级作用于, 定义于 for
if
等结构中的变量在外部仍能够使用。
PHP 定义函数和函数类型时, 都使用了 function
关键字, 定义闭包时又新增了 fn
关键字, 而函数类型声明又分为 callable
和 Closure
。换而言之, 函数并未成为 PHP 的一等公民。
作为弱类型语言, PHP 本身就是泛型的。 但 PHP 没有提供优秀的语法糖来处理类型。 is_int()
, is_string()
, instanceof
等函数返回布尔值, 无法流畅调用。
字符串与字节流没有区分, 导致使用多字节字符串需要使用 mb_string
拓展函数。
特性
- 支持 JSX 风格语法来取代HiDoc 语法并提供 DOM解析与反射
变量
- 变量可以直接定义,不需要也不能使用
$
- 使用点
.
访问类属性(静态和非静态)
关键字
- 增加
is
关键字,类型判断, 返回布尔值。替代is_*
,instanceof
增加
as
关键字, 进行强制类型转换删除
foreach
,while
,do-while
等循环关键字, 仅保留for
循环并增加for ... in
变体替代foreach
- 删除
extends
和implements
关键字, 使用:
替代class <name>: <parent-class>, <interface>
- 删除
new
关键字, 直接使用类名函数创建对象 - 删除
fn
关键字, 直接使用闭包语法() => ...
x => …() => { }
结构
- 支持类内嵌套枚举(类的枚举)