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