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);
  }
}

这不起作用,因为我不能从类内部调用$extensions(?)。有没有一种方法可以做到这一点,而不包括$extensions在这个类的每个对象?用

声明对象似乎很疯狂

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

并且该类的每个实例都有相同数组的副本?

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

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);
  }
}