Как я могу загрузить vars из include () внутри функции ()? - PullRequest
1 голос
/ 21 июня 2011

Я пытаюсь получить некоторые переменные из файла .php.Я вызываю функцию, в которой есть включенный файл с нужными мне переменными, но он не возвращает их.Внутри функции я могу просматривать значения переменных, но не вне функции.

//MODULE INCLUDE
function moduleInclude($mid) {
$query = "SELECT file,type FROM sh_module WHERE mid = '{$mid}'";
$exe = mysql_query($query);
$row = mysql_fetch_array($exe);
$folder = moduleFolder($row['type']);
$output = include("../includes/modules/".$folder."/".$row['file']);

return $output;
}

//Load the vars
moduleInclude($mod_ship);
$ship_meth = $MODULE_title_client;
//THE ^^^^ MODULE_title_client never returns anything :(

Ответы [ 3 ]

2 голосов
/ 21 июня 2011

include не возвращает содержимое файла include, просто поместите код этого файла в то место, где этот файл включен.

И переменные, объявленные в файлах, доступны после оператора include.но поскольку вы пытаетесь получить к ним доступ вне функции, переменная не будет доступна, поскольку они теперь являются областью действия функции.

Вы можете обновить свой код, добавив этот файл извне функции.

function moduleInclude($mid) {
$query = "SELECT file,type FROM sh_module WHERE mid = '{$mid}'";
$exe = mysql_query($query);
$row = mysql_fetch_array($exe);
$folder = moduleFolder($row['type']);
return "../includes/modules/".$folder."/".$row['file'];
}

//Load the vars
$include_path=moduleInclude($mod_ship);
include $include_path;
$ship_meth = $MODULE_title_client;
1 голос
/ 21 июня 2011

Я думаю, вы можете использовать что-то вроде этого:

//MODULE INCLUDE
function moduleInclude($mid) {
    $query = "SELECT file,type FROM sh_module WHERE mid = '{$mid}'";
    $exe = mysql_query($query);
    $row = mysql_fetch_array($exe);
    $folder = moduleFolder($row['type']);
    include("../includes/modules/".$folder."/".$row['file']);
    return get_defined_vars();
}

//Load the vars from include file into array
$module_vars=moduleInclude($mod_ship);
//Use the desired variable
$ship_meth = $module_vars['MODULE_title_client'];

если я вас правильно понял. Это действительно ужасно, и я предлагаю вам больше узнать о области видимости переменных , чтобы сделать этот код лучше, так как включение в функцию - это почти всегда неправильный путь. Я думаю, нам нужно знать, что происходит внутри вашего включаемого файла "../include/modules/".$folder."/".$row['file '], чтобы помочь вам лучше.

0 голосов
/ 21 июня 2011

Просто верните объект в конце вашего включаемого файла:

$foo = 1;
$bar = 2;
return array('foo' => $foo, 'bar' => $bar)

Тогда include вернет массив, возвращенный в модуле.

...