PHP 在函数中调用静态函数


Php call static functions in a function

我正在尝试从函数中的类调用静态函数。在伪代码中,如下所示:

function process_image($file_name) {
  $file_tmp_loc = $_FILES["uploaded_file"]["tmp_name"];
  move_uploaded_file($file_tmp_loc, 'uploads/' . $file_name);
  require("GifFrameExtractor.php");
  $gif_file_path = 'uploads/' . $file_name;
  if (GifFrameExtractor::isAnimatedGif($gif_file_path)) { 
    //do stuff here
  }
}

我已经需要我在实际函数中调用的类,但我不断收到一个未找到类的错误。此文件与尝试以 777 权限使用它的脚本位于同一目录中。我不断收到此错误:

致命错误:在第 557 行的 ...../functions.php 中找不到类"GifFrameExtractor"

只要代码有效,我真的不在乎这是否是糟糕的 OOP 明智,所以我不会寻找任何关于我为什么要做这样的事情的讲座或问题,除非这正是我不能做它们的原因。我知道该文件被包含,因为我没有任何require()或iostream错误。

对于那些想知道的人,我正在尝试从 Github 实现这个类

该类旨在与 Composer 一起安装

这意味着它通常是命名空间的。为了能够使用该类,您必须导入命名空间

如果您不使用作曲家,则必须确保自己安装软件包所需的所有依赖项。幸运的是,这个类没有任何(除了有PHP>=5.3.0)

因此,您可以只包含它并导入命名空间。

做这样的事情:

<?php
include 'src/GifFrameExtractor/GifFrameExtractor.php';
use GifFrameExtractor'GifFrameExtractor AS GifFrameExtractor;
function doSomeStuff()
{
    GifFrameExtractor::isAnimatedGif('test.gif');
}
doSomeStuff();

您也可以删除 use 语句并使用完全限定的命名空间:

<?php
include 'src/GifFrameExtractor/GifFrameExtractor.php';
function doSomeStuff()
{
    GifFrameExtractor'GifFrameExtractor::isAnimatedGif('test.gif');
}
doSomeStuff();

通常,如果软件包使用的是作曲家,也要通过作曲家安装它。否则,您可能会遇到一些不需要的和不必要的行为(如果包需要依赖项)