PHP:有没有办法在对象构造函数中使用全局变量?
问题描述:
我有一个PHP脚本,旨在用户可编辑,一些选项设置在一开始,包括允许的图像文件扩展名。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);
申报对象,并有这个类的每个实例具有相同的数组的副本?
答
,似乎最适合我想要做的(请记住,我是一个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);
}
}
答
为什么不为此创建类?
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
...
}
+0
我认为你的代码只有PHP7 – Andreas
+1
const支持数组,因为PHP 5.6+ –
http://php.net/manual/en/language.variables.scope.php – aynber
你不一定必须注入'$ extensions'变量本身,但是你可以注入一个像' SettingsProvider'或其他什么可以c保持它,并为您的应用程序的许多其他常见设置 –
@aynber是的!这就是我需要的。 –