У меня есть два разных файла .php, первый называется get_data.php
и выглядит так:
<?php
...
$current_date = date("Y-m-d H:i:s");
$total_sales = 35;
$total_revenue = 12;
$this_month_sales = 3;
$this_month_revenue = 7;
$last_month_sales = 2;
$last_month_revenue = 5;
...
?>
Теперь второй файл, который я использую, называется index.php
и наверху index.php
у меня есть следующий код, прежде чем любой из моих HTML
<?php include_once 'get_data.php'; ?>
Теперь я могу ссылаться на значения get_data.php
изнутри index.php
просто введя имя переменной, это работает.
Тем не менее, у меня есть function()
Внутри index.php
что я использую, чтобы проверить значения и вернуть процент в виде строки
Эта функция выглядит так:
function compareMonths($checkingRevenue) {
global $this_month_revenue;
global $this_month_sales;
global $last_month_revenue;
global $last_month_sales;
...
}
Однако эта функция возвращает «0» для всех четырех переменных. Я пытался не устанавливать их как глобальные. Как я могу получить значения от get_data.php
быть в рамках моей функции внутри index.php?
Решением для этого было просто поместить функцию в get_data.php, однако я хочу знать, как правильно установить область видимости, чтобы я мог делать такие вещи в будущем.
Это смущает меня, потому что документация для include_once заявляет
Когда файл включен, код, который он содержит, наследует переменную область строки, в которой происходит включение. Любые переменные, доступные в этой строке в вызывающем файле, будут> доступны в вызываемом файле, начиная с этого момента. Однако все функции и> классы, определенные во включаемом файле, имеют глобальную область видимости.
Что означает, что это должно быть доступно, не так ли?
Если предположить,
global $this_month_revenue;
global $this_month_sales;
global $last_month_revenue;
global $last_month_sales;
переменные, которые вы хотите передать в функцию при вызове. например:
compareMonths($checkingRevenue, $this_month_revenue, $this_month_sales);
function compareMonths($checkingRevenue, $val1, $val2) {}
Других решений пока нет …