如何在PHP中声明“子对象”

6

我在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的id,而element_id则来自于elements

我想要能够访问给定用户的库以及他们的元素。

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

我是这样做的:

$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
  )
 )
)

现在,我想要做的是针对数据数组中的每个库(元素),检索所有元素。

目前我最好的想法是这样做:

foreach($mylibrary->data_array as $library) {
 $sublibrary = new Library();
 $sublibrary -> getAllElements();
}

其中Sublibrary是另一个类,它具有函数getAllElements。虽然我不确定自己是否正确,但我无法使其正常工作...

是否有一种方法可以让我最终能够执行以下操作,以检索特定元素?

$mylibrary->sublibraries[0]->element[0]
1个回答

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]

?>

哇,谢谢!我没想到你会给出完整的答案,但你真的帮了我很多。这也有助于我理解它。再次感谢。 - Sharon

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接