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

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

У меня есть главный класс, который всем управляет (app)
К нему идут все запросы клиентов (html, ajax).
В app->__construct запускаю метод app->ajax, который проверяет какой метод пытается запустить ajax делаем экземпляр другого класса, который (я планирую) будет содержать все ajax методы (appAjax).
Но в этом appAjax мне нужен доступ к основному классу (app).
Схема такая

App.php:
class App() {

function __construct() {

     ob_start();
     self::ajax();
}

private function ajax() {
     if ( isset( $_SERVER['HTTP_X_REQUESTED_WITH'] ) && ! empty( $_SERVER['HTTP_X_REQUESTED_WITH'] ) && strtolower( $_SERVER['HTTP_X_REQUESTED_WITH'] ) == 'xmlhttprequest' ) {
			ob_end_clean();
			if ( ! empty( $_POST['ajax_action'] ) ) {

				$method_name = $_POST['ajax_action'];

				self::includeModule( 'ajaxes' );  //Инклудится файл с appAjax

				$ajax = new appAjaxes();

				if ( method_exists( $ajax, $method_name ) ) {
					$ajax->$method_name();
					die();
				}
			}
		} else {
			return;
		}
		die( '0' );
}

}

function __destruct() {
		ob_end_flush();
	}


ajaxes.php
class appAjaxes {

	function test() {
               //Как вот тут получить доступ к методам App?
		echo 'test';

	}
}



Сразу говорю, это моя первая попытка писать ООП. Выслушаю все предложения. (Решил не начинать с фреймворков, ибо самому хочется понять как это делать с вытекающими и получением своего опыта.
  • Вопрос задан
  • 221 просмотр
Подписаться 1 Средний 4 комментария
Решение пользователя ThunderCat К ответам на вопрос (3)
ThunderCat
@ThunderCat Куратор тега PHP
{PHP, MySql, HTML, JS, CSS} developer
Но хотелось бы красиво всё сделать с одной точкой входа.

у вас слегка неверное понятие единой точки входа.
1) Статика это плохо, тем более если это стартовый класс.
2) Не проще организовать нормальный мвц?
3) Как заметил Олег Муравейко - если вы пытаетесь почесать яйца пяткой - скорее всего вы выбрали не ту конечность.

точка входа - индекс, она уже вызывает класс Апп, или бутстрап или еще какой-то стартовый класс, который уже выполняет настройку окружения и запускает Роутер, в котром и происходит магия выбора Контроллера и экшна, после чего уже все полученные в контроллере данные передаются в Вид, который рендерится и отдается клиенту. У вас же прям в стартовом классе все в кашу - и старт контроллеров, и "роутинг", и экшны запускаются. Салют салатом.
Нужен аякс - заводите аякс контроллер и там уже экшны, которые отвечают на определенные запросы от фронта.
Нужен Юзер - заводитен юзер контролллер и там все экшны - лист, эдд, делит, едит, шоу...
Ответ написан
Комментировать