Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/256.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
访问函数中的全局php对象会导致错误_Php - Fatal编程技术网

访问函数中的全局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,你喝醉了吗?没有。睡眠不足这是一个很大的可能性。