Php 如何在类中包含变量脚本?未定义变量

Php 如何在类中包含变量脚本?未定义变量,php,class,include,Php,Class,Include,获取了一个脚本,该脚本包含表示数据字段的字符串变量,就像它们在数据库中一样。因为这个项目是一个烂摊子,这是一个清理的阶段,不必在许多地方重写字段名 因此,一个脚本“DataKeys.php”将变量设置为字段名 //results from query1 $keyField1 = 'field1'; $keyField2 = 'field2'; 上面这两个变量只是更长列表的一小部分 我希望在格式化数据时访问此文件并使用这些变量,以便对前端更友好。正在类中访问此脚本,但是在类中找不到脚本中定义的

获取了一个脚本,该脚本包含表示数据字段的字符串变量,就像它们在数据库中一样。因为这个项目是一个烂摊子,这是一个清理的阶段,不必在许多地方重写字段名

因此,一个脚本“DataKeys.php”将变量设置为字段名

//results from query1
$keyField1  = 'field1';
$keyField2 = 'field2';
上面这两个变量只是更长列表的一小部分

我希望在格式化数据时访问此文件并使用这些变量,以便对前端更友好。正在类中访问此脚本,但是在类中找不到脚本中定义的字段
$keyField1
。我确实有实际的字符串,但我认为单一的访问点将是最好的,所以当我将来进行更改时,我不需要搜索整个项目

class DataFormatter {
    //put your code here
    public function __construct() {
        $documentRoot = filter_input(INPUT_SERVER, "DOCUMENT_ROOT");
        include ($documentRoot . '/database/values/DataKeys.php');
    }

    public function cleanData($data){
        if (is_null($data) || empty($data)) 
        {
            return;
        }

        foreach($data as $row){
            $field1Value = $row[$keyField1];
            unset($row[$keyField1]);
        }
    }
}
我还尝试将include移到类定义之外

$documentRoot = filter_input(INPUT_SERVER, "DOCUMENT_ROOT");
include ($documentRoot . '/database/values/DataKeys.php');
正在报告的错误是:

Undefined variable: keyField1
SOULTION
也许不是最佳方式,但我使用include语句并将其放在函数中。上面的代码只是我试图实现的一个演示,而不是我正在使用的实际代码。

这两个变量在“include”之后可用。 例如,可以将这两个值放在对象的属性中

include ...;
$this->keyField1 = $keyField1;
$this->keyField2 = $keyField2;
必须将DataKeys.php分配给类成员

class DataFormatter {
    private $keyField1;
    private $keyField2;

    public function __construct($filename) {
        include $filename;
        $this->keyField1 = $keyField1;
        $this->keyField2 = $keyField2;
    }
}

$dataFormatter = new DataFormatter(filter_input(INPUT_SERVER, 'DOCUMENT_ROOT') . '/database/values/DataKeys.php');

在构造函数范围内设置值不会起任何作用,因为一旦构造函数完成,这些值就会消失。如果你真的想这样做,你需要用
public
(或
private
,等等)在你的所有行前面加上前缀,并直接将其包含在类中。一个稍微好一点的解决方案是解析,而不是将文件包含在构造函数中,以设置属性,如
$this->keyField1=…
。但请注意,您可能必须重写所有内容,因为您的示例中几乎所有变量都超出范围/未定义/未使用。@jeroen嗯,您是说我无法从外部php脚本访问这些变量,并将它们像一组全局变量一样使用,而只能在请求访问文件的类中使用?除非在需要它们的每个方法。@jeroen好的,那么我应该如何声明这两个字段为全局字段,并仅在cleanData()函数中访问它们?如果您只需要它们,您应该在那里包含文件,您的问题将被解决,这个类的问题将得到解决。有没有方法让您将这些变量添加到数据格式化程序中,并将它们放置在一个名为DataKeys的单独文件中?所以我可以从外部位置引用它们。我只是提供了一个更长字段名列表的模板。有没有一种方法可以让您添加到DataFormatter中的这些变量放在一个名为DataKeys的单独文件中?所以我可以从外部位置引用它们。我只是提供了一个更长字段名列表的模板。