Как вывести значение массива, заданного классом php? - PullRequest
0 голосов
/ 18 марта 2019

Я надеюсь, что кто-то может помочь мне с моей проблемой.Я все еще новичок в PHP, извините.Мой код выглядит так:

class Component
{
    public $title;

    // value if nothing gets set
    public function __construct($title = "Test") {
        $this->title = $title;
    }

    public function setTitle($value)
    {
        $this->title = $value;
    }

    public function getTitle()
    {
        return "Title: ".$this->title;
    } 

    public function returnInfo()
    {
        $info = array(
        'Titel'         => $this->title,            
        );      

        return $info;
    }

Так что в классе «Компонент» функции должны установить и получить конкретное значение.Если для заголовка ничего не установлено, оно должно получить значение «Тест».С returnInfo () должна возвращаться информация типа title: в другом классе с именем ComponentInfo пользователь может добавить компонент, например кнопку.Затем пользователь может установить информацию, такую ​​как заголовок.И после этого информация должна быть сохранена в массиве, и теперь я хочу отобразить всю информацию, подобную этой:

Заголовок: Button-Standard

Как это может работать?И где ошибка в моем коде?

Было бы полезно получить рабочий код, в котором пользователь может создавать столько классов ComponentInfo, сколько ему нужно, и где он может добавлять различные компоненты с информацией, которая может быть сохранена в массив.

Ив конце он должен быть представлен как текст на главной странице.

1 Ответ

0 голосов
/ 18 марта 2019

Вы не можете создать экземпляр абстрактного класса. Вам необходимо удалить ключевое слово abstract из класса ComponentInfo.

ОБНОВЛЕНИЕ учитывая информацию в вашем комментарии, я бы пошел это

Component.php

abstract class Component
{
    private $key;
    private $title;

    public function __construct($key, $title) {
        $this->setKey($key);
        $this->setTitle($title);
    }

    public function setKey($key)
    {
        $this->key = $key;
    }

    public function getKey()
    {
        return $this->key;
    } 

    public function setTitle($title)
    {
        $this->title = $title;
    }

    public function getTitle()
    {
        return $this->title;
    }

    public function __toString()
    {
        return $this->getKey().': '.$this->getTitle();
    }

}

ComponentInfo.php

class ComponentInfo extends Component
{
    public function __construct($key='Info', $title='example title')
    {
        parent::__construct($key, $title);
    }
}

А затем используйте это в своем коде somefile.php

$components = [];
$components []= new ComponentInfo();
$components []= new ComponentInfo('Different Key', 'Other info');
$components []= new ComponentNavigation('longitude', 'latidude'); //create another class like ComponentInfo

[... later you want to print this info in a list for example]

echo '<ul>';
foreach($components as $components) {
    echo '<li>'.$component.'</li>'; //the __toString() method should get called automatically
}
echo '</ul>'; 

Это должно сработать, однако, имея другие компоненты без каких-либо других особенностей, чем другой заголовок и ключ не имеет смысла. Вместо этого вы могли бы просто иметь разные Component с другим ключом и заголовком.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...