我正在为我正在进行的项目构建一个目录/文件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)){ ... }
答案 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();
答案 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");