Получение значения конфигурации для глобальной или постоянной переменной

#php

#php

Вопрос:

Я пытаюсь присвоить значение из файла json какой-либо глобальной / статической переменной, а затем использовать эту глобальную / статическую переменную позже в файле.

 static $API_KEY = get_api_key(); // gives: Constant expression contains invalid operations
define('API_KEY', get_api_key()); // gives: PHP Notice:  Undefined variable: API_KEY in /content.php on line 422

function get_api_key() {
    $file_content = file_get_contents("./msx/start.json");
    $json = json_decode($file_content);
    
    return $json->tmdb_api_key;
}
 

Комментарии:

1. Определение должно работать. Что в строке 422? Я не думаю, что использование статического способа когда-либо будет работать.

2. Это define не сработает. Согласно руководству по PHP : «Значение константы. В PHP 5 значение должно быть скалярным значением (int, float, string, bool или null). В PHP 7 также принимаются значения массива. » . Вы не можете использовать функцию в define

Ответ №1:

За эти годы я несколько раз обжигал пальцы глобальными переменными, так что теперь я делаю все по-другому.

Создайте класс для всего вашего кода вместе с run() методом, а затем вы можете использовать свойство класса для своего «глобального».

Что-то вроде этого:

 class myClass {
    private $apiKey;

    public function __construct() {
        $this->apiKey = $this->getApiKey();
    }

    private function getApiKey() {
        $file_content = file_get_contents("./msx/start.json");
        $json = json_decode($file_content);

        return $json->tmdb_api_key;
   }

   public function run() {
   // do stuff using $this->apiKey
   }
}
 

А затем вызвать его следующим образом:

 <?php
   $p = new myClass();
   $p->run();
 

Комментарии:

1. Спасибо за предложение, я нахожу немного радикальным изменением переносить все в класс только для того, чтобы учесть такую небольшую проблему. Я не большой поклонник концепции ООП всего класса.

2. Я включил ваше предложение, и это не было такой уж большой проблемой, и в качестве побочного продукта я избавился от всех ГЛОБАЛЬНЫХ переменных. Спасибо за ваш ответ.