如何在PHP中声明"子对象"

Sha*_*ron 7 php oop

我在PHP中对OOP比较陌生,我不确定我尝试做的是可行的还是推荐的.无论如何,我无法弄明白.我很感激任何可能有用的教程或文档的指示 - 我不希望这里有一个全面的答案.

我有一个系统,每个用户都有许多"库".每个库都包含许多"元素".

数据库设置如下:

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
Run Code Online (Sandbox Code Playgroud)

library_idid来自哪里user_libraries,element_id是来自elements.

我希望能够访问给定用户的库及其元素.

我已经设置了库类,可以使用它来检索库列表(或子列表).

我是这样做的:

$mylibraryset = new LibrarySet();
$mylibraryset->getMyLibraries();
Run Code Online (Sandbox Code Playgroud)

给出(当我使用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
  )
 )
)
Run Code Online (Sandbox Code Playgroud)

现在,我希望能够做的是为每个库(data_array中的元素)检索所有元素.

我到目前为止最好的想法是做一些事情:

foreach($mylibrary->data_array as $library) {
 $sublibrary = new Library();
 $sublibrary -> getAllElements();
}
Run Code Online (Sandbox Code Playgroud)

Sublibrary是另一个具有getAllElements函数的类.我不能让它工作,但我不确定我是否在正确的线路上......

有没有办法让我最终能够做到这样的事情:

$mylibrary->sublibraries[0]->element[0]
Run Code Online (Sandbox Code Playgroud)

检索特定元素?

正如我所说,我不希望在这里有一个全面的解释 - 只是指示让我开始.

Pet*_*ter 4

<?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]

?>
Run Code Online (Sandbox Code Playgroud)