@Alan-322

Как обращаться к элементам массива?

Друзья, может кто знает,
почему мы иногда к ключам массива обращаемся через квадратные скобки: $locations[ $menu_name ]
а иногда так: $menu_item->url (внутри цикла)

Все время путаюсь.
Вот пример кода с wp-kama.ru. Что он делает понимаю, но эти обращения к свойствам все время путают.

// Получим элементы меню на основе параметра $menu_name (тоже что и 'theme_location' или 'menu' в аргументах wp_nav_menu)
// Этот код - основа функции wp_nav_menu, где получается ID меню из слага

$menu_name = 'custom_menu_slug';
$locations = get_nav_menu_locations();

if( $locations && isset($locations[ $menu_name ]) ){
	$menu = wp_get_nav_menu_object( $locations[ $menu_name ] ); // получаем меню

	$menu_items = wp_get_nav_menu_items( $menu ); // получаем элементы меню

	// создаем список
	$menu_list = '<ul id="menu-' . $menu_name . '">';

	foreach ( (array) $menu_items as $key => $menu_item ){
		$menu_list .= '<li><a href="' . $menu_item->url . '">' . $menu_item->title . '</a></li>';
	}

	$menu_list .= '</ul>';
}
else 
	$menu_list = '<ul><li>Меню "' . $menu_name . '" не определено.</li></ul>';
  • Вопрос задан
  • 106 просмотров
Решения вопроса 1
zorca
@zorca
$locations[ $menu_name ] - массив
$menu_item->url - объект
Понятие элемент относится к массиву, свойство - к объекту.
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
mashletov
@mashletov
Программист
Дополню, что помимо полноценных классов, есть еще StdClass — пустой дефолтный класс из коробки, которому можно присваивать свойства.
$o = new \StdClass;
$o->prop1 = '123123';
$o->prop2 = 'xxxxxx';

Его можно преобразовать в массив:
$o = (array)$o;
echo $o['prop1'];


Да и любой массив можно преобразовать в StdClass:
$arr = ['test1' => 1, 'test2' => 2];
$o = (object)$arr;
echo $o->test1;
Ответ написан
@antoshadrobyshev
WordPress & Woocommerce developer
Вы не знаете ООП, если задаете такой вопрос
Как обращаться к элементам массива?
$numbers = array(1,2,3);
echo $numbers[0]; // выведет 1

Как обращаться к объектам?
class Numbers {
public $one = 1;
public $two = 2;
public $three = 3;
}
$object = new Numbers();
echo $object->one; // выведет 1
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через TM ID
Похожие вопросы
от 2 000 до 4 000 usd.
Teamlead Краснодар
До 100 000 руб.
HTML Academy Санкт-Петербург
от 130 000 до 140 000 руб.
18 авг. 2018, в 09:13
13000 руб./за проект
18 авг. 2018, в 01:10
17000 руб./за проект
17 авг. 2018, в 23:00
5500 руб./за проект