代码之家  ›  专栏  ›  技术社区  ›  Shy

在哪里关闭在PHP脚本开头打开的文件句柄?

  •  1
  • Shy  · 技术社区  · 7 年前

    我有一个PHP文件,在上面我使用 fopen() . 然后file有几个类,在这些类的函数中,我把东西写到这个文本文件中。最后,也就是说,当我把东西写到这个文件中时,我必须使用 fclose()

    控制流是这样的,在下面的伪代码中,函数 a_b() A 在这个PHP脚本中被称为最后一个。所以,很自然地,在 a_b() fclose($fileHandle); .

    但我有一个错误:

    问题是为什么?我应该在哪里写声明 fclose($fileHandle)

    <?php 
    
    $fileHandle = fopen($pathToFileHandle, "a");
    
    class A {
      function a_a() {
        ...
        fwrite($fileHandle, "blahBlahBlah");
      }
    
      function a_b() {
        ...
        fwrite($fileHandle, "Whatever");
        ...
        fclose($fileHandle);
      }
    }
    
    class L {
      function l_a() {
        ...
        fwrite($fileHandle, "Some text");
        ...
      }
    }
    
    ?>
    
    2 回复  |  直到 7 年前
        1
  •  1
  •   symcbean    7 年前

    is considered a bad thing

    您不需要显式关闭文件句柄-当脚本退出时,PHP会自动关闭。

    call a function when the script finishes executing (请注意,回调也可以是一个对象,即具有相关数据)。

    正如Renee所指出的,您的问题源于范围。然而,在两个不同的类中分割文件操作的设计也很糟糕,并且会产生程序性的副作用。使用单个类定义所有文件操作(打开、关闭、读取、写入)。然后将对该类的引用传递给其他类,这些类将向文件提供或需要数据。

        2
  •  1
  •   goto-bus-stop    7 年前

    默认情况下,PHP函数无法访问全局变量。因此:

    $value = 'hello world';
    class A {
        public function b () {
            return $value;
        }
    }
    

    $value 在函数中不可用。

    global 使全局变量在函数中可用的关键字:

    $value = 'hello world';
    class A {
        public function b () {
            global $value;
            return $value;
        }
    }
    

    但是,正如评论者所建议的那样,如果可能的话,最好保持 $fileHandle 变量,并尽快关闭句柄。