mark_edinoroglove
@mark_edinoroglove

Что не так с кодом PHP?

Здравствуйте, подскажите что не так здесь..?
<?php
class Menu {
	private $menu;
	public function Menu() {
		$this->menu = array(
			'news' => array(
				'url'=>'/news',
				'title'=>_('Новости'),
				'active'=>false,
				'place' => 0,
				'parent' => false,
			),
			'wiki' => array(
				'url'=>'https://wiki.metrostroi.net" target="_blank',
				'title'=>'Wiki',
				'active'=>false,
				'place' => 0,
				'parent' => false,
			),
			'players' => array(
				'url'=>'/players',
				'title'=>_('Игроки'),
				'active'=>false,
				'place' => 0,
				'parent' => false,
			),
			'servers' => array(
				'url'=>'/servers',
				'title'=>_('Сервера'),
				'active'=>false,
				'place' => 0,
				'parent' => false,
			),
			'mag' => array(
				'url'=>'/mag',
				'title'=>'MAG',
				'active'=>false,
				'place' => 0,
				'parent' => false,
			),
			'admin' => array(
				'title' => _('ПУ'),
				'active' => false,
				'place' => 1,
				'parent' => false,
				'right' => 'adm',
				'icon' => 9,
			),
			'news_add' => array(
				'url'=>'/news_add',
				'title'=>_('Добавить новость'),
				'active'=>false,
				'place' => 0,
				'parent' => 'admin',
				'icon' => 9,
				'show_icon' => 'plus icon',
			),
			'admin_mag' => array(
				'title' => _('MAG: Жалобы'),
				'url'=>'/admin_mag',
				'active' => false,
				'place' => 1,
				'parent' => 'admin',
				'right' => 'mag_reports',
				'show_icon' => 'warning icon',
			),
			'admin_tickets' => array(
				'title' => _('Тикеты'),
				'url'=>'/admin_tickets',
				'active' => false,
				'place' => 1,
				'parent' => 'admin',
				'right' => 'tickets',
				'show_icon' => 'cube icon',
			),
			'admin_tests' => array(
				'title' => _('Тесты'),
				'url'=>'/admin_tests',
				'active' => false,
				'place' => 1,
				'parent' => 'admin',
				'right' => 'up_down',
				'show_icon' => 'check square icon',
			),
			'admin_log' => array(
				'title' => _('Журнал действий'),
				'url'=>'/admin_log',
				'active' => false,
				'place' => 1,
				'parent' => 'admin',
				'right' => 'log',
				'show_icon' => 'book icon',
			),
			'admin_questions' => array(
				'title' => _('Вопросы к тестам'),
				'url'=>'/admin_questions',
				'active' => false,
				'place' => 1,
				'parent' => 'admin',
				'right' => 'edit_tests',
				'show_icon' => 'table icon',
			),
		);
	}
	public function set_item_active ($id) {
		$this->menu[$id]['active'] = true;
		if ($this->menu[$id]['parent']) $this->set_item_active($this->menu[$id]['parent']);
	}
	private function show_item ($id, &$item, $kid = false) {
		global $logged_user;
		global $locale;
		$c = 0; $sub = '';
		if (isset($item['right']) and !($logged_user and $logged_user->take_group_info($item['right']) or (isset($item['icon']) and $logged_user and $logged_user->max_icon_id() >= $item['icon']))) {
			if (isset($item['icon']) and !($logged_user and $logged_user->max_icon_id() >= $item['icon']))
				return '';
			elseif (!isset($item['icon']))
				return '';
		}
		foreach ($this->menu as $tmp_id => $tmp_item)
			if ($tmp_item['parent'] and $tmp_item['parent'] == $id) {
				$sub .= $this->show_item($tmp_id, $tmp_item, true);
				if ($tmp_item['active'])
					$item ['active'] = true;
				$c++;
			}
		ob_start();
		include Base::PathTPL(($c)?($kid)?'menu/item_subdropdown':'menu/item_dropdown':'menu/item');
		return ob_get_clean();
	}
	public function show($tpl, $error = false) {
		global $logged_user;
		global $locale;
		$menu = array('','');
		foreach ($this->menu as $id => $item)
			if (!$item['parent'])
				$menu[$item['place']] .= $this->show_item($id, $item);
		ob_start();
		include Base::PathTPL('menu/'. $tpl);
		return ob_get_clean();
	}
}

ошибка:
[09-Jun-2021 21:46:54 Europe/Moscow] PHP Deprecated: Methods with the same name as their class will not be constructors in a future version of PHP; Menu has a deprecated constructor in A:\OpenServer\domains\millennium\classes\menu.class.php on line 2
  • Вопрос задан
  • 153 просмотра
Решения вопроса 2
DevMan
@DevMan Куратор тега PHP
a что не понятно из сообщения?
в мохнатые годы конструктор (функция, которая автоматом вызывается при создании экземпляра класса) имел такое же название как и сам класс.
затем его отделили и сделали магический метод __construct.
Ответ написан
TNPTSYWWCC
@TNPTSYWWCC
And I Told Them I Invented Times New Roman
Там говорится о том, что делать одноименную функцию к классу в котором она находится - устаревшая фича, так раньше, в совсем бородатые времена описывался конструктор класса, это еще во времена появление 5ой версии стало deprecated (если не раньше).

Выясните, реально ли функция Menu описывается как конструктор, если да - переименуйте в __construct.
Но судя по коду, вам лучше даунгрейднуть версию PHP до той версии, где это не deprecated, ибо вряд ли это единственная проблема.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы
Laptop.ru Москва
от 150 000 до 190 000 ₽
DKLINE Санкт-Петербург
от 120 000 до 150 000 ₽
Laptop.ru Москва
от 130 000 до 170 000 ₽
18 июн. 2021, в 09:44
3000 руб./за проект
18 июн. 2021, в 09:33
1000 руб./в час
18 июн. 2021, в 09:30
1800 руб./за проект