spClass参数的问题?

#1 azwl

我原来用的3.0板 , 更新到3.1.6后,开始感觉没问题。后来在使用到外部的class时(我用的是一个上传类)发现new类时的参数不能准确传递!

查了一下源代码,好像是把数组参数转换成了单个参数。

这好像就和原来的语法产生歧义了。导致引起错误。

2011-06-08 14:07:07

#2 jake

3.0升级到3.1的时候,spClass参数是改变了,更符合使用习惯。

2011-06-08 16:07:18

#3 azwl

3.0升级到3.1的时候,spClass参数是改变了,更符合使用习惯。
jake 发表于 2011-6-8 16:07
能说说“更符合使用习惯”吗?

我想说的是兼容性更重要些。为了能正常运行还得到处修改原来的程序。

2011-06-08 16:28:22

#4 jake

绝对的兼容是无法做到的,只能把“影响减到最低”。修改spClass的参数形式,主要影响到拥有两个或以上参数的第三方类的构造函数,这种影响是比较小的。

原来的spClass不能支持以下的构造函数参数形式

class A{
function A(参数1, 参数2){
}
}
而要把它写成:

class A{
function A(参数数组){参数1 = 参数数组[0];参数2 = 参数数组[1];}
}
也就是说,旧的spClass参数方式,如果类的构造函数有两个或以上的参数的时候,一定要改写构造函数才能用,这样很不好。而新的spClass,参数方面就没这个限制了。

class A{
function A(参数1, 参数2){
}
}
$a = spClass('A', array(参数1, 参数2));

而且最大的特点是不需要再改写构造函数

2011-06-08 18:35:40

#5 azwl

继续讨论一下:

如果第三方类的构造函数的参数就是一个array呢? 也许你会说用下面的方法:

$a = spClass('A', array(array(参数1, 参数2))); 但这种方式总觉得怪怪的。

我觉得,在speedPHP架构基本定型的情况下,还是让用户来适应SP吧,而且这样改下去觉得有悖SP的speed精神。

另外建议在下载的版本中加个readme,把改动的地方一一列出并说明其用法,让用户知道SP的变动情况。不是每个用个都会仔细的去看SVN的。这次我出现的问题费了好大劲才发现问题的所在。

2011-06-08 21:49:20

#6 jake

其实spClass只能这样实现了,如果第三方类的构造函数存在第二个参数的时候就要改写第三方类,这是不可行。而且目前许多的类似spClass的实现,也都是用同样的参数传递方法。

对于sp的改动,也是很需要考量的地方。在兼容和发展之间,取得平衡是很难的事情,但是也是要去做。未来如果有更多的改动,我的想法是独立一个测试版或者衍生版的方式来做,这样比较容易让人接受。

readme这个的确是需要的,下个版本发布的时候会把它加上吧。:handshake

2011-06-08 22:47:42