我有一个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);
}
}