#php #oop
#php #ооп
Вопрос:
Я относительно новичок в ООП в PHP, и я не уверен, возможно ли или рекомендуется то, что я пытаюсь сделать. В любом случае, я не могу этого понять. Я был бы признателен за любые указания на учебные пособия или документы, которые могли бы помочь — я не ожидаю здесь полноценного ответа.
У меня есть система, в которой у каждого пользователя есть несколько «Библиотек». Каждая библиотека содержит несколько «элементов».
Настройка БД выглядит следующим образом:
user_libraries
- id (unique)
- user_id (identifies user)
- name (just a string)
elements
- id (unique)
- content (a string)
library_elements
- id (unique)
- library_id
- element_id
откуда library_id
берется идентификатор user_libraries
и откуда element_id
он elements
.
Я хочу иметь доступ к библиотеке данного пользователя и их элементам.
Я настроил класс library и могу использовать его для получения списка библиотек (или вложенного списка).
Я делаю это следующим образом:
$mylibraryset = new LibrarySet();
$mylibraryset->getMyLibraries();
что дает (когда я использую print_r):
LibrarySetObject (
[user_id] => 105
[data_array] => Array (
[0] => Array (
[id] => 1
[user_id] => 105
[type] => 1
[name] => My Text Library
)
[1] => Array (
[id] => 2
[user_id] => 105
[type] => 2
[name] => Quotes
)
)
)
Теперь, что я хотел бы иметь возможность сделать, это для каждой из этих библиотек (элементы в data_array), чтобы получить все элементы.
Лучшая идея, которая у меня была до сих пор, — это сделать что-то вроде:
foreach($mylibrary->data_array as $library) {
$sublibrary = new Library();
$sublibrary -> getAllElements();
}
где Sublibrary — это другой класс, который имеет функцию getAllElements . Я не могу заставить это работать, и я не уверен, что я на правильном пути…
Есть ли способ, которым я могу в конечном итоге сделать что-то подобное:
$mylibrary->sublibraries[0]->element[0]
для извлечения определенного элемента?
Как я уже сказал, я не ожидаю здесь полномасштабного объяснения — просто указатели, которые помогут мне начать.
Ответ №1:
<?php
class Library {
public $element;
public $data;
public function __construct($sublibrary) {
$this->data = $sublibrary;
}
public function getAllElements() {
// populate $this->element using $this->data
}
}
class LibrarySet {
public $user_id;
public $data_array;
public $sublibraries;
public function getMyLibraries() {
// populate $this->data_array
$this->sublibraries = Array();
foreach($this->data_array as $index => $sublibrary) {
$this->sublibraries[$index] = new Library($sublibrary);
$this->sublibraries[$index]->getAllElements();
}
}
}
$mylibraryset = new LibrarySet();
$mylibraryset->getMyLibraries();
$mylibraryset->sublibraries[0]->element[0]
?>
Комментарии:
1. Вау, спасибо! Я не ожидал полного ответа, но вы действительно помогли. И это также помогает мне разобраться в этом. Еще раз спасибо.