У меня есть такой массив:
// Define pages
$pages = array(
"home" => array(
"title" => "Home page",
"icon" => "home"),
"compositions" => array(
"title" => "Composition page",
"icon" => "music"),
);
И то, что я пытаюсь сделать, это иметь:
$navigation = Utils::makeNavigation($pages);
, Создайте $navigation
как массив объектов, так что я могу разобрать его на мой взгляд
как это:
foreach($navigation as $nav_item){
echo $nav_item->page; // home(1st iter.), compositions(2nd iter.)
echo $nav_item->title;// Home page, Composition page
echo $nav_item->icon; // home, music
}
Является static
Util-like-class
подходить хорошо для такого рода проблем?
РЕДАКТИРОВАТЬ
Я придумал что-то вроде этого, это нормально?
<?php
class Utils {
protected static $_navigation;
public static function makeNavigation($pages = array()){
if (!empty($pages)){
foreach ($pages as $page => $parts) {
$item = new stdClass;
$item->page = $page;
foreach ($parts as $key => $value) {
$item->$key = $value;
}
self::$_navigation[] = $item;
}
return self::$_navigation;
}
}
}
Предполагая, что вы создаете массив вручную в своем коде, просто приведите к объектам:
$pages = array(
"home" => ( object ) array(
"title" => "Home page",
"icon" => "home"),
"compositions" => ( object ) array(
"title" => "Composition page",
"icon" => "music"),
);
Это позволит получить к ним доступ как к объектам:
$pages->home->title;
или перебирая их так:
for ( $pages as $pageName => $pageObject ) echo $pageName . " has title: " . $pageObject->title;
Я бы включил создание как статический член класса, чтобы сохранить код, специфичный для класса:
class NavItem
{
// Static member does not require an object to be called
static function create ($def)
{
$ret = array ();
foreach ($def as $idx=>$navDef)
$ret [$idx] = new NavItem ($navDef);
return $ret;
}
function __construct ($def)
{
// Do something more specific with the current def (title, icon array)
$this->param = $def;
}
function display ()
{
// Simple example
echo $this->param ['title'];
echo $this->param ['icon'];
}
var $param;
};
// Using your pages array as above
$pages = NavItem::create ($pages);
foreach ($pages as $idx=>$page)
$page->display ();