Улучшение существующего массива объектов для автоматизации создания массива - PullRequest
0 голосов
/ 02 января 2019

Я пытаюсь создать легко обновляемый список заголовков / URL-адресов, которые могут заполнять различные места на моем сайте (сообщения в блоге).

У меня есть рабочая версия, но я знаю, что ее можно улучшить, поэтому мне не нужно обновлять создание массива вручную каждый раз, когда я добавляю новый класс или страницу блога.

До этого момента я гуглил все проблемы, но, похоже, не могу найти аналогичную проблему в Интернете. На данный момент у меня есть цикл for, который рассчитывается на основе итерационной переменной в конструкторе класса:

for ($x = 0; $x <= $pageCount; $x++) {
    $pageList[] = '$page' . $x;
} 

Таким образом, я могу получить правильное слово, которое представляет переменную, но не значение в переменной.

Класс выглядит так:

class BlogPage
{
    public $link;
    public $name;
    public $tags;

    public static $counter = 0;

    function __construct() {
        self::$counter++;
    }
}

$page0 = new BlogPage();
$page0->link = 'hike-safe';
$page0->name = 'How to Conquer the Mountains';
$page0->tags = "";

$page1 = new BlogPage();
$page1->link = 'how-to-map';
$page1->name = 'How to Read a Map and Compass';
$page1->tags = "";

$page2 = new BlogPage();
$page2->link = 'test';
$page2->name = 'Test thats a bit longer';
$page2->tags = "";

$pageCount = BlogPage::$counter - 1;

for ($x = 0; $x <= $pageCount; $x++) {
    $pageList[] = '$page' . $x;
} 

Это массив, который я буду обновлять вручную:

$blogPages = array($page2, $page1, $page0);

Как мне обойти эту переменную головоломку?

1 Ответ

0 голосов
/ 02 января 2019

Как уже упоминалось в документации , вы можете использовать {} для динамического создания имен переменных.

Рассмотрим следующий пример:

$a0 = "AAA";
$a1 = "BBB";
$a2 = "CCC";
$cnt = 3;
$res = array();
for($i = 0; $i < $cnt; $i++)
    $res[] = ${"a" . $i}; // will assign value of $a0, $a1, $a2 in each iteration

Теперь $res будет содержать:

Array
(
    [0] => AAA
    [1] => BBB
    [2] => CCC
)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...