【问题标题】:How to use array from one function, inside another function如何在另一个函数中使用一个函数中的数组
【发布时间】:2014-03-24 04:36:05
【问题描述】:

我是 OOP 和 PDO 领域的新手,在一个函数中返回数据并希望在另一个函数中使用该数据时,我只需要一点帮助。

下面是我从我的数据库中获取所有壁虎数据的函数,目前我让它打印出数组,所以我知道它正在工作。

函数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。如果这被认为是“菜鸟”问题,我深表歉意,但正如我所说,我正在努力学习。

感谢您的宝贵时间:)

【问题讨论】:

  • $row 在 getMorph 中定义在哪里?您应该将某些内容返回给变量吗? $this->getGecko($geckoName);返回 true 但从不给变量

标签: php arrays


【解决方案1】:

你的第一个函数的问题是你返回一个布尔值。没有返回实际数据。此外,在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

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

【讨论】:

  • 这给了我所有这些(来自转储)array(12) { ["gecko_id"]=> string(1) "1" ["gecko_name"]=> string(5) "Zilly " ["gecko_aquisition_date"]=> string(10) "0000-00-00" ["gecko_type"]=> string(6) "正常" ["gecko_gender"]=> string(4) "男性" ["gecko_traits "]=> NULL ["gecko_bio"]=> string(13) "Hench bastard" ["gecko_health_check"]=> string(9) "一切都好!" ["gecko_bred"]=> 字符串(1) "0" ["gecko_hatchling"]=> 字符串(1) "0" ["gecko_clutch"]=> NULL ["gecko_photo"]=> NULL }
  • 但是当注释掉转储时,它返回一个空白页
  • @AndyHolmes:是的。如何初始化对象并调用方法?
  • @AndyHolmes:第一步:将these lines 添加到脚本的最顶部。
  • @AndyHolmes:太好了。我希望它可以帮助未来的访客阅读这个问题。祝你的项目好运!
【解决方案2】:

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

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

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-04
    • 2018-07-02
    • 2018-12-02
    相关资源
    最近更新 更多