PHP: 有没有办法在对象构造函数中使用全局变量?

PHP: Is there no way to use a global variable inside an object constructor?

我有一个 php 脚本,旨在供用户编辑,在开头设置了一些选项,包括允许的图像文件扩展名。

稍后,我想在对象构造函数中使用它来设置文件是否为图像。

$extensions = ["jpg", "jpeg", "gif", "png"];

class directory_entry {

  function __construct($name) {

    $this->name = $name;

    $extension = pathinfo($name, PATHINFO_EXTENSION);
    $this->is_image = in_array(strtoupper($extension), $extensions); // throws an error

    $this->image = $this->is_image($name);

  }
}

这不起作用,因为我无法从 class(?) 内部调用 $extensions。有没有办法不在这个 class 的每个对象中包含 $extensions?用

声明对象似乎很疯狂

$files[] = new directory_entry($value, $extensions);

并让这个 class 的每个实例都有同一个数组的副本?

为什么不为此创建一个类?

class ExtensionsEnum
{
    const IMAGES = ["jpg", "jpeg", "gif", "png"];
}

然后

use ExtensionsEnum;

class directory_entry {
...
    $this->is_image = in_array(strtoupper($extension), ExtensionsEnum::IMAGES); // throws an error
...
}

似乎最适合我正在尝试做的事情的解决方案(请记住,我是 PHP 和 OOP n00b)是 globals 关键字:

$extensions = ["jpg", "jpeg", "gif", "png"];

class directory_entry {

  function __construct($name) {

    $this->name = $name;

    $extension = pathinfo($name, PATHINFO_EXTENSION);
    global $extensions; //use the global version of $extensions
    $this->is_image = in_array(strtoupper($extension), $extensions); // works!

    $this->image = $this->is_image($name);

  }
}