我目前在PHP中使用此代码:
public function newFile($folder, $file){
fopen($folder."/".$file, 'w');
}
我这样使用:
newFile('myfolder', 'myfile.txt');
它工作正常,但我想知道是否可以创建一个我可以这样使用的函数:
newFile('myfile.txt') inFolder('myfolder');
如果有可能,我怎么能这样做?
我也可以用这个:
newFile('myfile.txt')->inFolder('myfolder');
答案 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();