2015-04-07 6 views
1

Хорошо, я «своего рода» новичок в объектах stdClass в PHP, и я немного экспериментирую, чтобы понять, как экспортировать данные/создавать API-интерфейсы, чтобы получать информацию из базы данных с соответствующей информацией.Понимание объектов stdClass

Итак, я хочу предоставить пользователю доступ к некоторой информации из, скажем, базу данных или XML-файл (а не только некоторые части). (В этом случае это локальный файл sqlite3), и я хочу предоставить пользователю данные в формате JSON.

С чем мне нужна помощь? Короче говоря, я хотел бы получить от вас несколько советов, чтобы решить «проблему» умнее, чем я уже получил. (Я предполагаю, что мой путь вроде ... некрасиво решение

Это текущий экспорт структуры, экспортировать (без JSON-кодирования):. http://codepaste.net/965tgj

Я сделал это следующим образом в PHP-файл: (пользователи $ это acually данных sqlite3.db и я понимаю, что в полной мере, как использовать, так что я похудела коды вниз :)

$users = array(
    array(
     "id" => 1, 
     "user" => "Xavizus" 
    ), 
    array(
     "id" => 2, 
     "user" => "Zariel" 
    ) 
); 

$obj = new stdClass(); 
$obj->auth = true; 
$obj->usercount = 2; 
$obj->users = array(); 

for($i =0; $i < $obj->usercount; $i++){ 
     $obj->users[] = new stdClass(); 
} 

for($i = 0; $i < $obj->usercount; $i++) { 
     $obj->users[$i]->id = $users[$i]['id']; 
     $obj->users[$i]->user = $users[$i]['user']; 
} 

print_r($obj); 

есть уборщик способа сделать это ? Или это как можно более чистое?

+1

Вы должны определить свой собственный класс и быть_наст конструктор принимают значения инициализации. Это было бы намного чище. – jeroen

+0

Не забудьте проверить свои тесты stdClasses ... – Barett

+0

@jeroen Спасибо за отзыв :) (Как я уже говорил - я как бы новый в PHP, и я все еще учился - я добрался до скажем, это потрясающее сообщество! – Xavizus

ответ

2

Это было бы проще, используя (object) бросить массив:

$obj = new stdClass(); 
$obj->auth = true; 
$obj->usercount = count($users); 
$obj->users = $users; 

foreach($obj->users as &$user) { 
    $user = (object)$user; 
} 

Однако я хотел бы посмотреть на @ Комментарий jeroen: «Вы должны определить свой собственный класс и иметь constr uctor принимает значения инициализации. Это было бы намного чище

class users { 

    function __construct($users, $auth=true) { 
     $this->auth = $auth; 
     $this->usercount = count($users);   

     foreach($users as $user) { 
      $this->users[] = (object)$user; 
     } 
    } 
} 

$obj = new users($users); 

Вы также мог бы привести массив строк к объекту при назначении его из fetchArray().

+0

Спасибо за отличное объяснение :) Не ожидал, что это сообщество будет полезно :) – Xavizus

+0

Okey - я не нашел кнопку репутации .... Редактировать: Nvm .... Просто нужно нажать кнопку ответа и ответить на голосование :) – Xavizus

+0

"_reputation button_" ??? – AbraCadaver

1

вы можете d o это в одном для цикла правильно?

вместо

for($i =0; $i < $obj->usercount; $i++){ 
     $obj->users[] = new stdClass(); 
} 

for($i = 0; $i < $obj->usercount; $i++) { 
     $obj->users[$i]->id = $users[$i]['id']; 
     $obj->users[$i]->user = $users[$i]['user']; 
} 

вы можете сделать это что-то вроде

for($i =0; $i < $obj->usercount; $i++){ 
     $newObject = new stdClass(); 
     $newObject->id = $users[$i]['id']; 
     $newObject->user = $users[$i]['user']; 
     $obj->users[] = $newObject; 
} 
Смежные вопросы