我不是一个职业程序猿,觉得php实在太难写了,但同时php的性能还是可以的,而且最主要的是使用广泛
之前帮sai姐姐写了一个算法,最近刨出来用scala和ruby重写了,可是她要我一定用php,坚决不在服务器上装jvm
我看过(包括写过)一些php,它们其实不是代码而是密码,但是大多数情况下php就算不是最好的选择,也是唯一的选择
这里应该有不少人对php是处于爱恨交织态度,所以既然逃不开在生产环境使用php,那么至少开发过程中可以不用写它吧
于是我想了想,不如来做一个php代码生成器吧,以下是我结合使用php经历的构想,欢迎各位提意见:
* 语法简化
* 告别<?php ?>,纯净php代码,反正大家都会用模版,内嵌html是个糟糕的做法。php6也有此改进
* 每一行末的;完全是必要的
* 变量名的$号完全是没有必要,只要全局常量全大写,就不会混淆
* 类名大驼峰,方法名小驼峰,为了一些语法糖不会混淆,这个必须强制
* 类
* 为了纯洁的oop,放弃static,改为类的伴生对象
* 为了纯洁的oop,例如str_replace(...),改为str.replace(...),在字符串对象上调用方法。php6或者7也将如此
* 类的访问控制如public private protected,应该像时髦的语言那样,尽可能少写。即默认public,一个private可以连续修饰好几个方法
* 为了更好的oop,添加mixin功能。php6或者7也将如此
* 基于上两条,同时提供更加细致的访问控制,可以用来专门指定对某个类及其后代的访问权限
* 调用方法中的->改为.或空格,括号不是必须的
* (2012)push->arr,如此实现从右到左调用方法,把2012插入数组arr后端,省略括号后为2012 push->arr
* 方法
* function -> def
* 不变性原则,绝对不能传递引用
* 无上限参数列表用*更直观,而不是在方法中func_get_args()
* 可以有多个返回值
* 静态类型
我目测写php的时候一般至少有20%的单元测试代码不干别的,专门测试类型是否正确
同上,还有更多(有时候是80%了)的phpdoc注释不干别的,专门标示方法参数的类型和返回值的类型
所以静态类型虽然看上去很难用,但是有助于减少体力劳动,所以:
* 语法:str1: String = "hello",用java们的空格方法显然太难看
* 声明时,方法的输入输出一定要显式指定类型,但对于lamdba可选,因为它们大概不需要被单元测试和生成文档
* 字面量和new方法创建对象,除非特例,否则显然不必要专门指定类型
* SQL类型:我用php时,如要长距离传递SQL语句,会定义SQL类,然后执行SQL方法判断输入的类,一定得是SQL类才行。SQL类无法和字符串拼接,然后用bindParam输入参数,防止SQL注入和人为疏忽的SQL注入
* 数组的成员类型要相同,即一个成员的key是数字那么该数组成员所有key都应该是数字,字符串"1"什么的是非法的
* 隐式转换,有静态类型必然还要有它
* 函数式编程
虽然5.3开始支持了lamdba等,但是并不好用
* 语法:{(arg1, arg2) ...},而不是function(arg1,arg2){...}
* {(arg) ...}("foobar")的就地调用,结合前面的调用方法,("foobar"){(arg) ...}也可以,而且更美观
* 结合纯洁的oop,arr.each{}用以代替foreach和变态for等循环语法,同时arr还应该有map和reduce/collect/folding等方法
* 其他一些函数式方法似乎不是很必要
* 其他
* 让定义数组方法更像json些,用:而不是=>,用花括号而不是圆括号,array开头不是必须的
以上基本是我目前的想法,非常不完整,大家有兴趣可以一起做这个东西,当然一切都是可以讨论的,目前我也只是设想阶段
如果各位在哪里见过类似的东西,那就不需要重复发明轮子了XD
之前帮sai姐姐写了一个算法,最近刨出来用scala和ruby重写了,可是她要我一定用php,坚决不在服务器上装jvm
我看过(包括写过)一些php,它们其实不是代码而是密码,但是大多数情况下php就算不是最好的选择,也是唯一的选择
这里应该有不少人对php是处于爱恨交织态度,所以既然逃不开在生产环境使用php,那么至少开发过程中可以不用写它吧
于是我想了想,不如来做一个php代码生成器吧,以下是我结合使用php经历的构想,欢迎各位提意见:
* 语法简化
* 告别<?php ?>,纯净php代码,反正大家都会用模版,内嵌html是个糟糕的做法。php6也有此改进
* 每一行末的;完全是必要的
* 变量名的$号完全是没有必要,只要全局常量全大写,就不会混淆
* 类名大驼峰,方法名小驼峰,为了一些语法糖不会混淆,这个必须强制
* 类
* 为了纯洁的oop,放弃static,改为类的伴生对象
* 为了纯洁的oop,例如str_replace(...),改为str.replace(...),在字符串对象上调用方法。php6或者7也将如此
* 类的访问控制如public private protected,应该像时髦的语言那样,尽可能少写。即默认public,一个private可以连续修饰好几个方法
* 为了更好的oop,添加mixin功能。php6或者7也将如此
* 基于上两条,同时提供更加细致的访问控制,可以用来专门指定对某个类及其后代的访问权限
* 调用方法中的->改为.或空格,括号不是必须的
* (2012)push->arr,如此实现从右到左调用方法,把2012插入数组arr后端,省略括号后为2012 push->arr
* 方法
* function -> def
* 不变性原则,绝对不能传递引用
* 无上限参数列表用*更直观,而不是在方法中func_get_args()
* 可以有多个返回值
* 静态类型
我目测写php的时候一般至少有20%的单元测试代码不干别的,专门测试类型是否正确
同上,还有更多(有时候是80%了)的phpdoc注释不干别的,专门标示方法参数的类型和返回值的类型
所以静态类型虽然看上去很难用,但是有助于减少体力劳动,所以:
* 语法:str1: String = "hello",用java们的空格方法显然太难看
* 声明时,方法的输入输出一定要显式指定类型,但对于lamdba可选,因为它们大概不需要被单元测试和生成文档
* 字面量和new方法创建对象,除非特例,否则显然不必要专门指定类型
* SQL类型:我用php时,如要长距离传递SQL语句,会定义SQL类,然后执行SQL方法判断输入的类,一定得是SQL类才行。SQL类无法和字符串拼接,然后用bindParam输入参数,防止SQL注入和人为疏忽的SQL注入
* 数组的成员类型要相同,即一个成员的key是数字那么该数组成员所有key都应该是数字,字符串"1"什么的是非法的
* 隐式转换,有静态类型必然还要有它
* 函数式编程
虽然5.3开始支持了lamdba等,但是并不好用
* 语法:{(arg1, arg2) ...},而不是function(arg1,arg2){...}
* {(arg) ...}("foobar")的就地调用,结合前面的调用方法,("foobar"){(arg) ...}也可以,而且更美观
* 结合纯洁的oop,arr.each{}用以代替foreach和变态for等循环语法,同时arr还应该有map和reduce/collect/folding等方法
* 其他一些函数式方法似乎不是很必要
* 其他
* 让定义数组方法更像json些,用:而不是=>,用花括号而不是圆括号,array开头不是必须的
以上基本是我目前的想法,非常不完整,大家有兴趣可以一起做这个东西,当然一切都是可以讨论的,目前我也只是设想阶段
如果各位在哪里见过类似的东西,那就不需要重复发明轮子了XD