如何在一个函数中使用数组,在另一个函数内部

时间:2014-02-22 13:48:24

标签: php arrays

我是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,我只是想改善自己和我的代码,并希望陷入OOP。如果这被认为是'noob'问题我会道歉,但正如我所说,我正在努力学习。

感谢您的时间:)

2 个答案:

答案 0 :(得分: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

以下问题有关于此主题的更多详细信息:

答案 1 :(得分:2)

您的函数getGecko仅返回一个布尔值,$row只是该方法中的局部变量。因此,您可以更改返回值以返回实际数据,也可以在PHP类中创建私有变量。

要更改返回类型,您可以在getGecko将此返回更改为以下内容:

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

然后在getMorph函数中执行以下操作:

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