Php 使用usort避免硬编码类名
我正在用静态方法实现一个排序解决方案。基本上,我有:Php 使用usort避免硬编码类名,php,oop,Php,Oop,我正在用静态方法实现一个排序解决方案。基本上,我有: 静态类(xbanner) 此类中包含对象数组的静态属性(Xbanners::$banners) 一种静态方法,根据存储为这些对象属性的一个参数对该对象数组进行排序(xbanner::$banners[0]->priority) 我只是使用调用排序方法,但我必须硬编码我的类的名称。我怎样才能避免这种情况 usort(self::$banners, 'Xbanners::' . $sortingMethod); 您可以使用\uuuu CLASS
xbanner
)Xbanners::$banners
)xbanner::$banners[0]->priority
)usort(self::$banners, 'Xbanners::' . $sortingMethod);
您可以使用
\uuuu CLASS\uuuu
代替硬编码的类名和回调定义的数组
usort( self::$banners, array( __CLASS__, $sortingMethod ) );
但是,我严格建议不要使用任何静态成员,而是以面向对象的方式实现您的功能。这避免了以后的继承问题,并且是一种更干净的方法(例如,测试方式)。您可以使用
\uuuuuu CLASS\uuuuuuuu>而不是硬编码的类名和回调定义数组
usort( self::$banners, array( __CLASS__, $sortingMethod ) );
但是,我严格建议不要使用任何静态成员,而是以面向对象的方式实现您的功能。这避免了以后的继承问题,是一种更干净的方法(例如,测试方式)。usort(self:$banner,array('xbanner',$sortingMethod))
我不确定是否正确理解了问题,但可能将'xbanner::'
替换为'self:'
或'static::'
(取决于您的应用程序)会有所帮助;)您还可以尝试类似于usort(self:$banner,array(_CLASS__;,$sortingMethod))
@delphist:我可能没有很好地解释我自己,但我试图避免命名类,就像在你的数组('Xbanner',…)中一样@nikic:self::在usort()中不起作用@斯莫特:这门课很好,请给我一个答案,这样我就可以接受了。usort(self:$banner,array('xbanner',$sortingMethod))
我不确定是否正确理解了问题,但可能将'xbanner::'
替换为'self:'
或'static::'
(取决于您的应用程序)会有所帮助;)您还可以尝试类似于usort(self:$banner,array(_CLASS__;,$sortingMethod))
@delphist:我可能没有很好地解释我自己,但我试图避免命名类,就像在你的数组('Xbanner',…)中一样@nikic:self::在usort()中不起作用@斯莫特:这门课做得很好,请给我一个答案,这样我就可以接受了。我知道静态课的坏处,我会在有时间的时候重新设计它。斯莫特首先指出了类解决方案,但如果他不发布答案,我会很乐意接受你的答案。我知道静态类的魔鬼,我会在有时间的时候尝试重新设计它。斯莫特首先指出了课堂解决方案,但如果他不给出答案,我会很乐意接受你的答案。