在哪里关闭在PHP脚本开头打开的文件句柄?
我有一个PHP文件,在上面我使用在哪里关闭在PHP脚本开头打开的文件句柄?,php,fopen,file-handling,filehandle,fclose,Php,Fopen,File Handling,Filehandle,Fclose,我有一个PHP文件,在上面我使用fopen()创建了一个文件句柄。然后文件有两个类,在这些类的函数中,我向这个文本文件写入内容。最后,也就是说,当我向这个文件写完东西后,我必须使用fclose()关闭这个文件句柄 控制流是这样的,在下面的伪代码中,类a的函数a_b()在这个PHP脚本中被最后调用。因此,很自然地,在a_b()正文的末尾,我决定编写fclose($fileHandle) 但是我得到了一个错误:注意:未定义的变量:第15行的C:\xampp\htdocs\Tests\Test.php
fopen()
创建了一个文件句柄。然后文件有两个类,在这些类的函数中,我向这个文本文件写入内容。最后,也就是说,当我向这个文件写完东西后,我必须使用fclose()
关闭这个文件句柄
控制流是这样的,在下面的伪代码中,类a
的函数a_b()
在这个PHP脚本中被最后调用。因此,很自然地,在a_b()
正文的末尾,我决定编写fclose($fileHandle)代码>
但是我得到了一个错误:注意:未定义的变量:第15行的C:\xampp\htdocs\Tests\Test.php中的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");
...
}
}
?>
未定义变量:第15行C:\xampp\htdocs\Tests\Test.php中的fileHandle
默认情况下,PHP函数无法访问全局变量。因此:
$value = 'hello world';
class A {
public function b () {
return $value;
}
}
…不起作用-$value
在函数中不可用
使用关键字使函数中的全局变量可用:
$value = 'hello world';
class A {
public function b () {
global $value;
return $value;
}
}
但是,正如评论者所建议的,如果可能的话,最好将$fileHandle
变量保留在使用它的类中,并尽快关闭句柄。将内联代码(即做某事的代码,而不是定义稍后调用的代码)混合在同一文件中,-不仅仅是因为它会引起你在这里描述的那种问题
您不需要显式地关闭文件句柄-当脚本退出时,PHP将自动执行此操作
如果您想做的不仅仅是关闭文件,那么在执行线程中显式调用关闭的另一种方法是让PHP执行(请注意,回调也可以是一个对象,即带有关联数据的对象)
正如Renee指出的,您的问题源于范围。然而,将文件操作分为两个不同的类也是一种糟糕的设计,并且会产生程序上的副作用。使用单个类定义所有文件操作(打开、关闭、读取、写入)。然后将对该类的引用传递给其他类,这些类将向文件提供或需要数据。为什么不在方法内部打开和关闭?有理由不这样做吗?@RajeshPaudel说了什么。还有,哪一行是第15行?@DimitrisDamilos
fclose($fileHandle)代码>-那个是第行15@RajeshPaudel没有,没有什么特别的原因,但是这个问题的答案会让我更好地理解控制流=)类中的变量是什么类型的$fileHandle
?它是公开的,所以所有功能都可以访问它吗?