how to include script of variables in a class? undefined variable

71 Views Asked by At

got a script which has string variables that represent data fields like they are in the database. because this project is a complete mess this is a stage in cleaning it up and not having to rewrite the field name in numerous locations.

so one script 'DataKeys.php' will have variables set to field names.

//results from query1
$keyField1  = 'field1';
$keyField2 = 'field2';

these two vars above is only a snippet of a much longer list.

I want to access this file and use these vars when I am formatting the data to be more friendly for the front end. this script is being accessed in a class however the fields, $keyField1, defined in the script is not being found in the class. I did have the actual string there but I think single access point would be best so when I make future changes I don't need search the whole project.

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]);
        }
    }
}

I also tried moving the include outside the class definition.

$documentRoot = filter_input(INPUT_SERVER, "DOCUMENT_ROOT");
include ($documentRoot . '/database/values/DataKeys.php');

The error that is being reported is :

Undefined variable: keyField1

SOULTION Maybe not the optimal way but I took the include statement and placed it inside the function. The code above is just a demo of what I was trying to achieve not the actual code I am using.

2

There are 2 best solutions below

1
On

the 2 variables are available just after the "include". you can for example, put the 2 values in properties of the object

include ...;
$this->keyField1 = $keyField1;
$this->keyField2 = $keyField2;
1
On

You have to assign DataKeys.php to class member.

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');