Co oznacza taki zapis?

0

Witam.

Trochę nie rozumiem co "powoduje" taki zapis :

$controller->{$action}();
W tutorialu jest to lakonicznie opisane "call the action".

Proszę o wyjaśnienie jak to działa.

Tutaj jest adres tutoriala
http://requiremind.com/a-most-simple-php-mvc-beginners-tutorial/

0

Wywołuje na obiekcie $controller metodę, której nazwa zawarta jest w zmiennej $action.

0

dziekuje!

0

Pozwolę sobie uzupełnić wypowiedź @Patryk27.

Funkcja call w Twoim tutorialu to taki bardzo prosty FrontController.

Front Controller – jeden ze wzorców projektowych stosowany w projektowaniu aplikacji internetowych. We wzorcu tym istnieje jeden, centralny obiekt (np. Twoja funkcja call), który zarządza wszystkimi żądaniami przychodzącymi od klienta[1][2]. Wzorzec ten jest często stosowany ze wzorcem architektonicznym MVC.

PHP jest bardzo elastyczny i pozwala Ci wywolać metodę na obiekcie o dynamicznej nazwie. Równie dobrze mógłbyś ten zapis zastąpić switchem:

switch($action) {
  case 'customers':
    $controller->customersAction();
  case 'transactions':
    $controller->transactionsAction();
}

Tak samo Twój switch, w którym wybierasz controller możesz zastąpić w ten sposób:

// wersja bez switch:case
$controllerName = "pages";
$actionName = 'edit';

$controllerClass = strtoupper($controllerName) . "Controller";
$action = $actionName . 'Action';

$controller = new $controllerClass(); // klasę również możemy tworzć "ze stringa" - warto sprawdzić czy klasa istnieje i dodać jakiś try catch, ale to jest minimum konieczne
$controller->{$action}();

Kiedyś tłumaczyłem to koledze i na potrzeby tego zaimplementowałem bardzo prosty MVC, możesz sobie pobrać (link) i odpalić ten kod. Wszystko jest mocno pokomentowane. Zacznij od pliku index.php w katalogu public_html, a pozniej podążaj za kodem :)

1 użytkowników online, w tym zalogowanych: 0, gości: 1