我有一个功能:
function open($file){
return fopen($file, 'w');
}
然后通过以下方式调用:
function write($file,$text){
$h = $this->open($file);
fwrite($h,$text);
}
这不起作用。它返回fwrite被赋予无效的资源流。
此:
function open($file){
$h = fopen($file, 'w');
return $h;
}
工作正常,但我无法弄清楚为什么首先分配变量并且直接返回fopen()不能。
答案 0 :(得分:1)
它是否与您在对象中的事实有关?以下脚本适用于我:
<?php
function open($file) {
return fopen($file, 'w');
}
function write($file, $text) {
$h = open($file);
fwrite($h, $text);
}
write("test.txt", "hello\n");
?>
我在Mac OS X 10.5.7上运行PHP 5.2.8。
答案 1 :(得分:0)
这可能只是因为你在一个对象的范围内工作,所以它过早地清理了资源流 - 因为它传递了一个资源流byref,如果你有一个变量集,它通过改变变量来代替试图对资源流做 - 所以它会工作。
答案 2 :(得分:0)
宣布
var $ file
然后
$ this-&gt; file = fopen(...)
返回$ this-&gt;文件;
这样可行,因为$ file变量仍有引用。