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