2016-11-17 78 views
0

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

申报对象,并有这个类的每个实例具有相同的数组的副本?

+0

http://php.net/manual/en/language.variables.scope.php – aynber

+0

你不一定必须注入'$ extensions'变量本身,但是你可以注入一个像' SettingsProvider'或其他什么可以c保持它,并为您的应用程序的许多其他常见设置 –

+0

@aynber是的!这就是我需要的。 –

回答

0

,似乎最适合我想要做的(请记住,我是一个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); 

    } 
} 
0

为什么不为此创建类?

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+ –

相关问题