访问函数中的全局php对象会导致错误
访问函数中的全局php对象会导致错误,php,Php,$db=新数据库() 这是我在全球创建的一个对象。为了在函数中访问它,我使用了全局关键字。 代码如下: include "Database.php"; $db=new DataBase(); function getUser() { $uname=$_SESSION['UNAME']; global $db,$uid; $result2=$db->selectUserDetails(); $result3=$db->selectUserPermiss
$db=新数据库()代码>
这是我在全球创建的一个对象。为了在函数中访问它,我使用了全局关键字。
代码如下:
include "Database.php";
$db=new DataBase();
function getUser()
{
$uname=$_SESSION['UNAME'];
global $db,$uid;
$result2=$db->selectUserDetails();
$result3=$db->selectUserPermission($uid);
$table = constructTable($result2, $result3);
echo $table;
}
当我使用它时,它显示了一个错误
"Fatal error: Call to a member function selectUserDetails() on a non-object
in C:\\wamp\\www\\listdetails.php on line 27"
任何人都可以告诉我一个解决方案。这听起来像是在非静态上下文中调用静态函数
我认为您需要禁用新数据库()并静态调用该函数
$result2=$db::selectUserDetails();
写入全局$db,$uid
在函数的第一行getUser()
您向我们展示了一个函数,但没有向我们展示如何调用该函数。调用函数时,$db
似乎不存在……不,它显示了与旁白相同的错误,我只想指出,使用globals是懒惰的,被认为是糟糕的形式。它迫使任何使用您的代码的人都必须更加努力地工作。考虑在对象的使用中使用适当的OOP原则。这里的问题是,您将过程代码与面向对象代码混合在一起getUser()
应该是类中的方法。除了那个小小的批评,为什么不直接将$db
传递到函数中呢?当访问a)私有方法或b)像$obj->staticMethod这样的静态方法时,您会得到不同于“非对象上”的消息,a)导致“致命错误:调用私有方法…”,b)根本没有消息(即使有错误报告(2147483647)OP的错误消息很清楚。这是在非对象上调用方法的结果。实际上,只要该方法不引用$this,就允许从对象上下文调用静态方法。抱歉,但您的答案没有解决OP的问题。回家吧kelly,你喝醉了吗?没有。睡眠不足这是一个很大的可能性。