一个动作的多个功能?

时间:2013-12-16 13:44:39

标签: php file function

我目前在PHP中使用此代码:

public function newFile($folder, $file){
    fopen($folder."/".$file, 'w');
}

我这样使用:

newFile('myfolder', 'myfile.txt');

它工作正常,但我想知道是否可以创建一个我可以这样使用的函数:

newFile('myfile.txt') inFolder('myfolder');

如果有可能,我怎么能这样做?

我也可以用这个:

newFile('myfile.txt')->inFolder('myfolder');

2 个答案:

答案 0 :(得分:5)

我可以看到你正在尝试实现类似Objective-C和类似语言的语法,但不幸的是,你做不到。只是习惯了PHP语法。

您可以使用数组来获取命名参数:

function newFile($params){
    fopen($params['folder']."/".$params['file'], 'w');
}

newFile(array(
    'folder' => 'myfolder',
    'file' => 'myfile.txt'
));

或者你可以使用代理来获得如下语法:newFile(...)->inFolder(...),但这肯定是一种过度杀伤。

答案 1 :(得分:2)

以下是您可能实施的示例。当你需要调用相同对象的lof函数(更好的可读性)时,经常使用这种技术。

关键是你的函数可能会返回对同一个对象的引用:

class Creator {
  private $file ;
  private $folder = "" ;

  public function newFile($file){
    $this->file = $file ;
    return $this ;
  }

  public function inFolder($folder){
    $this->folder = $folder ;
    return $this ;
  }

  public function create(){
    return fopen($this->folder."/".$this->file, 'w');
  }
}

$creator = new Creator();

$creator
  ->newFile("test.txt")
  ->inFolder("test")
  ->create();