0

PHP5.3.3とDrupal7.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 に答える