使用面向对象的界面时,finfo是如何关闭的?参考http://php.net/manual/en/class.finfo.php。
是否有必要这样做?
$finfo = finfo_open(FILEINFO_MIME_TYPE);
// ...
finfo_close($finfo); //This works
$zip = new ZipArchive();
// ...
$zip->close(); //This works
$finfo = new finfo(FILEINFO_MIME_TYPE);
// ...
$finfo->close(); //Error: Call to undefined method finfo::close()
finfo_close($finfo); //Error finfo_close() expects parameter 1 to be resource, object given
答案 0 :(得分:1)
查看the tests for fileinfo_close,PHP人员似乎只是使用unset
来模仿OOP版本中的行为。我无法在代码中找到任何暗示它自动完成的内容。
--TEST--
Test finfo_close() function : basic functionality
--SKIPIF--
<?php require_once(dirname(__FILE__) . '/skipif.inc'); ?>
--FILE--
<?php
/* Prototype : resource finfo_close(resource finfo)
* Description: Close fileinfo resource.
* Source code: ext/fileinfo/fileinfo.c
* Alias to functions:
*/
echo "*** Testing finfo_close() : basic functionality ***\n";
$magicFile = dirname( __FILE__ ) . DIRECTORY_SEPARATOR . 'magic';
$finfo = finfo_open( FILEINFO_MIME, $magicFile );
var_dump( $finfo );
// Calling finfo_close() with all possible arguments
var_dump( finfo_close($finfo) );
$finfo = new finfo( FILEINFO_MIME, $magicFile );
var_dump( $finfo );
unset( $finfo );
?>
===DONE===
--EXPECTF--
*** Testing finfo_close() : basic functionality ***
resource(%d) of type (file_info)
bool(true)
object(finfo)#%d (%d) {
}
===DONE===
答案 1 :(得分:0)
我认为你不需要。对于finfo_open
,您有一个OOP样式 - 对于finfo_close
,您没有。 finfo_close
只接受一个资源,而不是一个对象。
也许这是由PHP的垃圾收集器自动完成的。但是你不需要这样做 - 它没有任何功能,它可以做到。