为什么“返回fopen”会失败?

时间:2009-05-20 02:14:18

标签: php

我有一个功能:

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()不能。

3 个答案:

答案 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变量仍有引用。