Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/253.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 使用usort避免硬编码类名_Php_Oop - Fatal编程技术网

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()中不起作用@斯莫特:这门课做得很好,请给我一个答案,这样我就可以接受了。我知道静态课的坏处,我会在有时间的时候重新设计它。斯莫特首先指出了类解决方案,但如果他不发布答案,我会很乐意接受你的答案。我知道静态类的魔鬼,我会在有时间的时候尝试重新设计它。斯莫特首先指出了课堂解决方案,但如果他不给出答案,我会很乐意接受你的答案。