2014-02-22 2 views
0

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

Ниже приведена моя функция, чтобы получить все данные gecko из моей базы данных, в настоящий момент у меня есть распечатка массива, поэтому я знаю, что он работает.

функция getGecko:

public function getGecko($geckoName){ 
    $dbh = $this->dbh; 
    try { 
     if (!$geckoName) { 
      throw new Exception("No gecko name set!"); 
     } 
     $stmt = $dbh->query("SELECT * FROM geckos WHERE gecko_name = '$geckoName'"); 
     $stmt->setFetchMode(PDO::FETCH_ASSOC); 
     $row_count = $stmt->rowCount(); 
     $row = $stmt->fetch(); 

     if($row_count > 0){ 
      print_r($row); 
      return true; 
     } else { 
      echo 'No information found for '.$geckoName.'!'; 
      return false; 
     } 
    } 
    catch (Exception $e) { 
     echo $e->getMessage(); 
    } 
} 

, который выводит, как - Array ([gecko_id] => 1 [gecko_name] => Zilly [gecko_aquisition_date] => 0000-00-00 [gecko_type] => Normal [gecko_gender] => Male [gecko_traits] => [gecko_bio] => Hench bastard [gecko_health_check] => All good! [gecko_bred] => 0 [gecko_hatchling] => 0 [gecko_clutch] => [gecko_photo] =>) - нет проблем.

Но я хочу использовать эти данные внутри функции, называемой getMorph, для использования [gecko_type] => Normal. Я пробовал такие вещи, как:

public function getMorph($geckoName){ 
    $this->getGecko($geckoName); 
    echo $row['gecko_type']; 
} 

Но он ничего не возвращает. Я довольно привык к php в процедурный смысл, я просто пытаюсь улучшить себя и свой код и хотел застрять в ООП. Я извиняюсь, если это считается вопросом «noob», но, как я говорю, я пытаюсь учиться.

Спасибо за ваше время :)

+0

где находится $ строка определяется в getMorph? если вы вернете что-то в переменную? $ This-> getGecko ($ geckoName); возвращает true, но никогда не задается переменной –

ответ

2

Проблема с первой функцией является то, что вы возвращающая логическое значение. Фактические данные не возвращаются. Кроме того, в функции getMorph() вы пытаетесь использовать переменную $row. Это не будет работать, поскольку переменная $row существует только внутри локальной области функции getGecko(). Это заставит PHP вывести сообщение об ошибке. Если бы вы включили error reporting, вы бы это выяснили.

Чтобы устранить эту проблему, вы можете изменить свою первую функцию возвращения массив:

if($row_count > 0){ 
     // print_r($row); 
     return $row; 
    } else { 
     echo 'No information found for '.$geckoName.'!'; 
     return false; 
    } 

Тогда в вашей второй функции, вы можете получить доступ к массиву, как так:

public function getMorph($geckoName){ 

    // $morph now contains the entire array 
    // returned by the other function 
    $row = $this->getGecko($geckoName); 

    // output the array contents 
    echo '<pre>' . print_r($row, TRUE), '</pre>'; 

    // return the specific gecko_type value 
    return $row['gecko_type']; 
} 

Предлагаю вам ознакомиться с variable scope. Это будет очень полезно. Кроме того, полностью не связанная проблема выше, вы прямо вставляете пользовательский ввод в свой SQL-запрос. Не делай этого! Вместо этого используйте параметризованные запросы - таким образом, вы сможете избежать SQL injection attacks.

Следующие вопросы имеет более подробную информацию по данному вопросу:

+0

, это должно решить ее –

+0

Это дает мне все это (из дампа) array (12) {["gecko_id"] => string (1) "1" ["gecko_name"] = > string (5) "Zilly" ["gecko_aquisition_date"] => string (10) "0000-00-00" ["gecko_type"] => string (6) "Normal" ["gecko_gender"] => string (4) «Мужской» ["gecko_traits"] => NULL ["gecko_bio"] => string (13) "Hench bastard" ["gecko_health_check"] => string (9) «Все хорошо!» ["gecko_bred"] => string (1) "0" ["gecko_hatchling"] => string (1) "0" ["gecko_clutch"] => NULL ["gecko_photo"] => NULL} –

+0

Однако при комментировании дамп, он возвращает пустую страницу –

2

Ваша функция getGecko возвращает только логическое и $row только локальная переменная в этом методе. Таким образом, вы можете либо изменить возвращаемое значение, чтобы вернуть фактические данные, либо создать приватную переменную в своем классе PHP.

Для изменения типа возвращаемого, вы могли бы в getGecko изменения, которые возвращают к чему-то вроде этого:

if($row_count > 0){ 
    // ... 
    return $row; 
} 

, а затем в вашей getMorph функции сделать что-то вроде:

public function getMorph($geckoName){ 
    $row = $this->getGecko($geckoName); 
    echo $row['gecko_type']; 
} 
Смежные вопросы