动态PHP If语句用于过滤结果

时间:2015-10-04 03:07:15

标签: php if-statement

我正在为我正在进行的项目构建一个目录/文件handeling类。为了使其更灵活,我想找到一种方法来制作动态if语句来处理排除项。我可以看到它在其他地方也有帮助。我想这样做IF($file !=....有点像

PUBLIC $filter = '$file != "."....';

IF($filter)

这样我就可以在调用$filter之前在主程序中设置FileLib1\GetDirectory() 目前我在GetDirectory()

中有以下内容
while ($file = readdir($handler)) 
{

    // if file isn't this directory or its parent, add it to the results
    //If $file !=  statement excludes things we dont want in the listing.  
    if ($file != "." && $file != ".." && $file !="0grp" && $file !="0ren" && $file != "unz.sh" && $file != "index.php" && $file != "galery.php" && $file != "forward.jpeg" && $file != "helper.html" && $file != "image.php" && $file != "reverse.jpeg") 
    {
        $results[] = $file;
    }

}

我正在使用我必须学习的几个位来更新问题,以便更完整地回答这个问题。

$exclusions = new CustomHandler();
$exclusions->exclude(array(
  'cover.jpg',
  ));
$fileExclusions = $exclusions->getExclusions(); 

这就是我必须格式化运行时代码才能使类工作的原因。

public function getExclusions()
{
    return $this->excludes;
}

这是在类的末尾添加的,以允许将类中的值返回到运行时变量,以便在if语句中使用..

  if(!in_array($content, $fileExclusions)){ ... }

2 个答案:

答案 0 :(得分:1)

如果你正在构建一个类,你可以设置一个默认变量,例如$excluded,这是一个空数组。然后在类的构造函数中,您可以初始化默认值并合并传入的任何自定义,例如:

$handler = new CustomHandler(array('screen.jpg', 'stuff.png', 'script.sh'));

这样的实现如下所示:

class CustomHandler {

    /*
     * Empty variable. Used to reference excluded variables during invoking and processing.
     */

    public $excluded = array();

    /*
     * @param $excludes - array
     * 
     */
     public function __construct($excludes = false)
     {
         //default exclusions here.
         $this->excludes = array(
             '0ren',
             'unz.sh'
             //etc....
         );
         if( is_array( $excludes ) ){
             $this->excludes = array_merge($this->excludes, $excludes);
         }
    }

    //other functions to process here
}

我还意识到,如果你想利用方法链来保持构造函数的开销。这个例子如下。

class CustomHandler {

    /*
     * Empty variable. Used to reference excluded variables during invoking and processing.
     */

    public $excluded = array();

    public function __construct()
    {
        return $this;        
    }

    /*
     * @param $excludes - array
     */
    public function exclude($excludes = false){
        //default exclusions here.
         $this->excludes = array(
             '0ren',
             'unz.sh'
             //etc....
         );
         if( is_array( $excludes ) ){
             $this->excludes = array_merge($this->excludes, $excludes);
         }
         return $this;
    }

    public function process(){
        echo 'Pre-process handler..';
        echo '<pre>', print_r($this->excludes, true),'</pre>';
    }
}

$handler = new CustomHandler();

$handler->exclude(array(
    'screen.jpg',
    'stuff.png',
    'script.sh'
))->process();

And finally..here's a working example

答案 1 :(得分:1)

你可以使用类似的方法 -

$notArray = array('.', '..', '0grp', '0ren','unz.sh','index.php','galery.php','forward.jpeg','helper.html','image.php','reverse.jpeg');
if (in_array($file, $notArray)) {
    echo 'skipping ';
}
echo $file.PHP_EOL;

但是,我建议您重新组织文件,使感兴趣的文件都在一个目录中。

或者,使用 glob 仅请求名称与特定模式匹配的文件,例如:

$dataFiles = glob("*.dat");