2012-12-19 4 views
0

PHP 5.3.3과 Drupal 7.17을 사용하여 Drupal의 함수를 호출하고 싶습니다.객체 대신 배열()을 전달하면 : 객체가 아닌 객체를 얻으려고 시도합니다.

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하는 차례로 객체가 pass 특성을 갖는 것으로 예상

아마 : PHP가 내 배열을 받아들이지 않습니다. 거기에 객체가 필요합니다.

어떻게 익명의 개체를 "즉석에서"만들어서 행복하게 만들 수 있습니까?

+1

변경'$ account-> pass''$ 계정에 [ '통과']'. 배열 키에 액세스하는 방법입니다. –

+0

Drupal의'includes/password.inc' 파일을 수정하고 싶지 않기 때문에 제안이 잘못되었습니다. 난 그냥 내 작은 스크립트에서 그 기능을 사용하고 싶습니다. –

답변

5

당신은 오류를 얻고있다. 수동 (@adityamenon로 대답으로) 객체를 생성하지 않으려면, 당신은 단순히 반대하는 배열을 캐스팅 할 수 있습니다

user_check_password($password, (object)array('pass' => $row['pass'])) 
3

새로운 '익명'개체를 만들려면 stdClass를 사용하십시오. 코드에서

$new_object = new stdClass;

: ArrayObject하지 않기 때문에

<?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); 
     } 
} 
+0

고맙습니다. 같은 행의 함수에 전달하는 방법이 있습니까? Smth. 'user_check_password ($ password, ... 여기에서 obj를 작성하십시오.)' –

+1

바닐라 유형의 코드 예제로 답변을 업데이트했지만 [익명 함수] (http://php.net/manual/)에서 볼 수 있습니다. en/functions.anonymous.php). 멋지게하려면 PHP에서); –

관련 문제