0

使用 PHP 5.3.3 和 Drupal 7.17,我创建了一个简短的自定义 PHP 脚本,我想在其中调用 Drupal 的函数——它又需要一个具有pass属性的对象:

function user_check_password($password, $account) {
  if (substr($account->pass, 0, 2) == 'U$') {
    $stored_hash = substr($account->pass, 1);
    $password = md5($password);
  }
  .....
}

因此,在我的脚本中,我尝试“即时”创建这样一个对象:

<?php

require_once('/path/to/drupal/includes/password.inc');
........
$sth = $db->prepare(SQL);
$sth->execute(array($username));
if ($row = $sth->fetch(PDO::FETCH_ASSOC)) {
        if (user_check_password($password, array('pass' => $row['pass']))) {
                header('Content-Type: application/json; charset=utf-8');
                print json_encode($row);
        }
}

然而,这给了我一个错误:Trying to get property of non-object

这可能意味着:PHP 不接受我的数组,它想要一个对象。

我怎样才能“即时”创建一个匿名对象,然后让它开心呢?

4

2 回答 2

5

你得到一个错误,因为Array不是Object. 如果您不想手动创建对象(如@adityamenon 的回答),那么您可以简单地将数组转换为对象:

user_check_password($password, (object)array('pass' => $row['pass']))
于 2012-12-19T14:40:53.153 回答
3

要制作新的“匿名”对象,请使用 stdClass。

$new_object = new stdClass;

在您的代码中:

<?php

require_once('/path/to/drupal/includes/password.inc');
........
$sth = $db->prepare(SQL);
$sth->execute(array($username));
if ($row = $sth->fetch(PDO::FETCH_ASSOC)) {
$new_object = new stdClass;
$new_object->pass = $row['pass'];
        if (user_check_password($password, $new_object)) {
                header('Content-Type: application/json; charset=utf-8');
                print json_encode($row);
        }
}
于 2012-12-19T14:35:52.167 回答