Задать вопрос

Как получить данные из массива в другом классе?

Здравствуйте!
Пытаюсь изучить PHP и ООП
Нарисовал себе несколько учебных задач и сразу встал в тупик
Вот простой класс:
class UrlParse
{
    public $uri;

    function __construct()
    {
        $this->uri = $_SERVER['REQUEST_URI'];
    }
    function urlSelect()
    {
        $a = explode('/', parse_url($this->uri, PHP_URL_PATH));
        $url = array(
            'app' => $a[1],
            'action' => $a[2]
        );
        return $url;
    }
}

Хочу в другом классе получить значение $url['app'].
Как сделать это правильно?
Вот такой код работает
$b = new UrlParse();
        echo $bs->urlSelect()['app'], '<br><br>';
        echo $b->urlSelect()['action'], '<br><br>';

однако подозреваю что это неверно и если так делать в реальном проекте это где-то даст по голове.
  • Вопрос задан
  • 132 просмотра
Подписаться 1 Простой 5 комментариев
Решения вопроса 1
Compolomus
@Compolomus Куратор тега PHP
Комполом-быдлокодер
Ну это может выглядет не красиво, но вполне работать будет, $url свойство лучше сделать приватным, на край можно добавить сахара . Например два метода, которые будут дергать тот или иной ключ с массива. Ещё можно вызывать urlSelect в конструкторе, и записывать эти два ключа в приватные свойства, и сделать два геттера, причём и свойство $url будет не нужно
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
xmoonlight
@xmoonlight
https://sitecoder.blogspot.com
Предложу свой "кривой" вариант (нормальный - с передачей аргументов в разные методы: проксирование нужно писать в функции __callStatic):
class UrlParse
{
    private $uri;

    function __construct()
    {
        $this->uri = $_SERVER['REQUEST_URI'];
    }
    
    public static function __callStatic($name, $arguments)
    {
    	switch ($name) {
        	case 'urlSelect':
        		$a = explode('/', parse_url($this->uri, PHP_URL_PATH));
        		$url = array(
            		'app' => $a[1],
            		'action' => $a[2]
        		);
        		return $url;
        		break;
        		
        	default: throw new Exception('Error: '.$name.'-method not found!');
    	}
    }
    
}

//Вызов метода (и создание экземпляра класса) - выполняется одной строкой
echo UrlParse::urlSelect()['app'];
Ответ написан
Ваш ответ на вопрос

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

Похожие вопросы