我一直在研究一个相对简单的项目,为了使它更容易,我决定使用this PHP类来简化数据库连接。但是,我遇到了一些问题。
<?php
require 'Slim/Slim.php';
require_once('lib/db.php');
\Slim\Slim::registerAutoloader();
$app = new \Slim\Slim();
$db = new MysqliDb('127.0.0.1', 'root', '', 'url_shortener');
$app->get('/u/:url', function ($url) {
$urls = $db
->where('short', $url)
->get('urls');
//require('views/u.php');
print_r($urls);
});
当我导航到/ u / 1时,我收到以下错误:
Fatal error: Call to a member function where() on a non-object in [my site index]
任何想法如何解决这个问题?
答案 0 :(得分:1)
您需要在Closure中导入$ db:
$app->get('/u/:url', function ($url) use ($db) { ... }
答案 1 :(得分:1)
$db
变量在您声明的匿名函数中不可用。你假设它是一个对象,但由于它没有定义,它是NULL
(在函数内部)。使用闭包,要访问函数范围之外的变量,可以使用use
关键字为该函数授予权限。
$app->get('/u/:url', function ($url) use ($db) { ... }
现在$db
在功能范围内可用,您可以随意使用它。