包括不在课堂上工作


Include not working in classes?

我不确定这是否只是我,但是每当我尝试使用include方法时,它都会失败。

<?php
  include_once 'db.php';
    class Cookies{
        public function Verify($Cookie){
            echo($dbh);
            $CookieStmt = $dbh->prepare("SELECT * FROM Cookies WHERE Cookie=:cookie");
            $CookieStmt->bindParam(":cookie",$Cookie);
            $CookieStmtExe = $CookieStmt->execute();
            if($CookieRow=$CookieStmtExe->fetch(PDO::FETCH_ASSOC)){
                if($CookieRow['EndDate']>time()){
                    return true;
                }else{
                            return false;
                        }
                       } else{
                    return false;
                }
        }
}
        ?>

我也尝试过在函数Verify内部include,但它总是会回显出来: 注意:未定义的变量:第 5 行的 dbh

是的,我已经在db.php中定义了$dbh

更新:我什至尝试了直接连接,但仍然失败

$dbh = new PDO('mysql:host=127.0.0.1;dbname=baheeg', 'root', '');
class Cookies{
    public function Verify($Cookie){
        echo($dbh);
        $CookieStmt = $dbh->prepare("SELECT * FROM Cookies WHERE Cookie=:cookie");
        $CookieStmt->bindParam(":cookie",$Cookie);
        $CookieStmtExe = $CookieStmt->execute();
        if($CookieRow=$CookieStmtExe->fetch(PDO::FETCH_ASSOC)){
            if($CookieRow['EndDate']>time()){
                return true;
            }else{
                        return false;
                    }
                   } else{
                return false;
            }
    }
}

问题是可变作用域。由于在函数外部分配变量$dbh,因此除非使用 global 声明,否则它在函数内不可用。

<?php
include_once 'db.php';
class Cookies{
    public function Verify($Cookie){
        global $dbh;
        echo($dbh);
        $CookieStmt = $dbh->prepare("SELECT * FROM Cookies WHERE Cookie=:cookie");
        $CookieStmt->bindParam(":cookie",$Cookie);
        $CookieStmtExe = $CookieStmt->execute();
        if($CookieRow=$CookieStmtExe->fetch(PDO::FETCH_ASSOC)){
            if($CookieRow['EndDate']>time()){
                return true;
            }else{
                return false;
            }
        } else{
            return false;
        }
    }
}
?>

您也可以将 include 语句放在函数中,但随后必须使用 include ,而不是include_once,因为它只会包含在您调用的第一个函数中,其他函数将跳过它。