-1

我觉得这是一个愚蠢的错误,但它让我在过去的 24 小时内停滞不前;我有一个类可以在我使用它的所有其他页面上完美运行。在为 PayPal 订阅创建 IPN 侦听器时,我现在正在使用此类的一个非常非常小的版本。

我遇到的问题是,在变量中创建类的新实例后(与我在所有其他页面上所做的完全相同),然后尝试访问它,我收到一条错误消息,提示我正在尝试使用非对象变量作为对象。

精简版;

创建该类的新实例:

$Utilities = new Utilitys(new db("mysql:host=XCensored;dbname=XCensored", "XCensored", "XCensored"));

使用对象

$a = $Utilities->db->run("SELECT * FROM XCensored WHERE XCensored =:id", array(':id' => (int)trim($XCensored)));

错误日志消息

PHP Notice:  Undefined variable: Utilities in XX/XX/XX/XX.php 

PHP Notice:  Trying to get property of non-object in XX/XX/XX/XX.php 

PHP Fatal error:  Call to a member function run() on a non-object in XX/XX/XX/XX.php 
4

2 回答 2

-1

看起来您正在互换使用“实用程序”和“实用程序”......除非这只是您的问题中的错字?

编辑:实际上,不,请忽略我。我没有正确阅读它。

编辑:您尝试过什么调试?我会在 db 和 Utility 类的不同位置放置几个 var_dump() 语句,以尝试缩小出错的范围。也许还可以在变量中实例化 db 类并将该变量传递给“new Utility()”。首先检查 db 变量是否包含 db 的对象。如果是这样,那么您的问题出在 Utility 类中。

编辑:好的,所以如果您尝试了以下方法,对吗?:

$db = new db("mysql:host=XCensored;dbname=XCensored", "XCensored", "XCensored");
$utilities = 新实用程序($db);

var_dump($db); // 你在 $db 中是否真的有一个 db 对象
var_dump($utilities) // 这里会出现什么

由原始海报解决:“......我现在想通了,这是一个愚蠢的错误;它与变量范围有关,我必须使用 PHP 的全局命令才能使其工作”

于 2013-07-23T09:49:20.560 回答
-1

正如 Tocacar 所说,检查 db 类是否正在返回一个对象。您的代码似乎是正确的。

假设您在连接数据库时遇到问题。如果这不起作用,您将不会收到对象。

作为旁注,我发现您的 db 类非常混乱。公共 $dbh 变量使读取代码变得非常复杂。在 db 类中,您可以执行 parent::execute() 等。

从 db 类之外,假设你有一个对象 mDb,你可以做 $mDb->execute()

我花了很长时间试图理解你在做什么。这使得调试更加困难。

正如 Tocacar 正确提到的那样,避免使用 Utilities 和 Utilitys 之类的细微差异,这只是在稍后提出问题。

于 2013-07-23T10:22:01.653 回答