2014-01-24 2 views
0

Может кто-нибудь помочь мне понять это. Это похоже на то, что я сделал это уже 100 раз, но по какой-то причине я не могу заставить его работать.Метод возвращает правое значение вне функции, внутри возвращается функция NULL

У меня есть класс Mysql, где я делаю свой SQL-материал.

У меня есть файл под названием ajax.php, с которым я выполняю некоторые запросы AJAX. В этом файле у меня есть:

$mysql = new Mysql($server, $dbuser, $dbpass, $dbselect); 
$show =$mysql->count('temp_vipalm', "21"); 
var_dump($show); 

Это возвращает значение, которое я ожидал. Теперь я хочу, чтобы использовать эту функцию в функцию, так что я могу сделать его немного более динамичным, поэтому в том же файле ajax.php я создаю эту функцию:

function menu($barid,$type) 
{ 
    //echo $barid; // returns correct value 
    //echo $bartype; //returns correct value 

$mysql = new Mysql($server, $dbuser, $dbpass, $dbselect); 
    //usually $barid and $type goes in here, but I hardcoded the values for testing. 
$show =$mysql->count('temp_vipalm', "21"); 
var_dump($show); 
} 

Теперь при запуске menu('21', 'temp_vipalm'); возвращается NULL.

Независимо от того, что я делаю, он продолжает возвращаться NULL, когда внутри функции - может ли кто-нибудь помочь мне понять, что происходит?

ответ

1

Ваши $server, $dbuser, $dbpass и $dbselect переменные являются глобальными. В пределах области функций вам придется объявить, что эти переменные поступают из глобальной области. Попробуйте следующее:

function menu($barid, $type) { 
{ 
    global $server, $dbuser, $dbpass, $dbselect; 
    $mysql = new Mysql($server, $dbuser, $dbpass, $dbselect); 
    // ... 
} 

Примечание: Было бы лучше сделать эти константы вместо переменных. Обычно лучше избегать переменных в глобальном масштабе. Если вы случайно перезапишите одно из этих значений в другом месте вашего кода, эта функция будет использовать неправильные значения.

+0

Спасибо! Это была моя проблема. – Bolli

+0

Принят ваш ответ за 9 минут - еще раз спасибо большое! Я получаю эти значения из файла конфигурации, поэтому я полностью об этом забыл. Ура! :) – Bolli

+0

Нет проблем. Рад, что это помогло. Обратите внимание на мою заметку в конце ... вероятно, было бы неплохо сделать их константами вместо переменных, особенно когда они находятся в глобальной области. – Travesty3

1

Переменные $server, $dbuser, $dbpass, $dbselect не объявлены в рамках функции, вы должны объявить их как global при условии, что они определены в глобальном env.

1

Там две вещи, чтобы быть в курсе:

  1. глобальные переменные должны быть объявлены глобальной внутри функции
  2. переменная должна быть уже инициированную

так это работает отлично:

<?php 
$fred=42; 

function printFred(){ 
    global $fred; // declare it global 
    echo "fred is: ". $fred . "\n"; 
} 

printFred(); 
?> 

тогда как это не делает то, что можно было ожидать:

<?php 

echo "Starting program...\n"; 
printStuff(); 
echo "the end"; 
exit(); 


$jim="Hello I'm jim"; 

function printStuff(){ 
    global $jim; 
    echo $jim . "\n"; 
} 
?> 

потому что в этом случае утверждение «$ jim =« Привет, я джим »; никогда не выполняется.

С уважением, TonyWilk

Смежные вопросы