Php 使用MySQLi时对非对象的成员函数的调用
我一直在做一个相对简单的项目,为了让它更简单,我决定使用PHP类来简化数据库连接。然而,我遇到了一些问题Php 使用MySQLi时对非对象的成员函数的调用,php,database,mysqli,Php,Database,Mysqli,我一直在做一个相对简单的项目,为了让它更简单,我决定使用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->ge
<?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);
});
有没有办法解决这个问题?您需要在闭包中导入$db:
$app->get('/u/:url', function ($url) use ($db) { ... }
$db
变量在您声明的匿名函数中不可用。您假设它是一个对象,但因为它没有定义,所以它是NULL
(在函数内部)。使用闭包,要访问函数范围之外的变量,可以使用关键字向函数授予权限
$app->get('/u/:url', function ($url) use ($db) { ... }
现在,
$db
在函数范围内可用,您可以随意使用它。太棒了,正是我想要的。@BenedictLewis:很高兴能提供帮助。干杯!:)还有一个快速的问题,现在它可以输出Array([0]=>Array([id]=>1[short]=>1[long]=>http://www.getbootstrap.com", "http://www.reddit.com", "http://www.bbc.com/news", "http://www.google.com“])
。我现在要做的就是在“long”下打印URL。我试过print\r($url['long'])
和print\r($url->long)
,但都不起作用。正确的语法是什么?@BenedictLewis:echo$url[0]['long']代码>应该这样做。此外,如果将print\r()
包装在
标记中,则可以获得数组的格式化输出,如:echo'。打印($URL,true)。“”代码>。
$app->get('/u/:url', function ($url) use ($db) { ... }