spClass参数的问题?
发布于:2022-01-17 09:50:54
#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