为什么PHP中有2个文件大小函数(filesize()和SplFileInfo :: getSize)?

时间:2016-11-26 16:33:07

标签: php

对不起,这可能是一个嘲笑的问题,但我一直在使用filesize()进行4个月的php编码(我是php的新手)和我总是把它想象成获取文件大小的php标准库函数。但现在我正在阅读关于Standard PHP Library (SPL)的内容,我感到惊讶的是还有一个名为SplFileInfo::getSize的函数完全相同的事情

  1. filesize()是否被认为是标准的php函数?
  2. 如果filesize()被认为是一个标准的php函数,为什么php创建者会通过创建另一个函数(SplFileInfo::getSize)来做同样的事情来打扰自己呢?
  3. 两个函数filesize()SplFileInfo::getSize之间有什么区别?我应该使用哪一个?
  4. 请注意我是php 的新手。感谢

1 个答案:

答案 0 :(得分:3)

  1. filesize()是否被认为是标准的php函数?
  2. standard是什么意思?正如我在手册filesize()中看到的那样,因为php4(它没有以正确的方式支持OOP)。因此,此函数是获取文件大小的过程方式。您只需要文件路径,而您获得的是一个大小。别无其他。

    1. 如果filesize()被认为是一个标准的php函数,为什么php创建者会通过让另一个函数SplFileInfo::getSize做同样的事情来打扰自己呢?
    2. 在php5中(正如你可以看到getSize自php5起可用)更多面向对象的功能已被添加到php中,它们都是标准PHP库或SPL的一部分。因此,在php5中,您可以将文件视为具有属性的对象 - 名称,大小等。因此,对于获取一个或另一个属性 - 这是一种方法。获取文件大小为getSize()

      因此,getSize不是函数,它是类SplFileInfo的方法。

      1. 两个函数filesize()SplFileInfo::getSize()之间有什么区别?我应该使用哪一个?
      2. 正如我们已经了解的那样 - filesize()使用程序方法:

        $filename = '/path/to/file.ext';
        $size = filesize($filename);
        

        由于getSize()是类的方法,因此应首先创建类的对象:

        $filename = '/path/to/file.ext';
        $finfo_obj = new SplFileInfo($filename);
        $size = $finfo_obj->getSize();
        

        因此,由您来决定 功能和使用哪种方法。