Użycie $this poza klasą

0

W jaki sposób to jest zrobione tak jak np. w Zendzie, że w pliku widoku użyte jest $this po za klasą?

Na przykład:

<?= $this->doctype() ?>

Jak coś takiego samodzielnie zrobić i jak to w ogóle jest możliwe?

0

Nie ma w tym żadnej magii ;-)

controller.php:

class MyController {

  public function actionXyz() {
    require_once 'view.php';
  }

  protected function getSomething() {
    return 'something';
  }

}

view.php:

// $this = MyController
echo $this->getSomething();
0

Bazując na Twoim przykładzie co powinna zwracać metoda getSomething()?

0

Załóżmy, że mam takie pliki:

controller.php:

<?php
	class MyController {
		public function actionXyz() {
			require_once 'view.php';
		}

		private $a = 'Jestem w widoku.';
		static protected function getSomething($a) {
			return $a;
		}
	}
	$foo = new MyController;
	var_dump($foo);

I plik view.php:

<?php
	echo $this->getSomething();

Wszystko w jednym katalogu. I tak otrzymuję błąd:

Fatal error: Uncaught Error: Using $this when not in object context in /opt/lampp/htdocs/tests/view.php:2 Stack trace: #0 {main} thrown in /opt/lampp/htdocs/tests/view.php on line 2

Mogę poprosić jakieś dodatkowe informacje?

0

Zrobiłeś sam przecież z getSomething metodę statyczną, czyli musiałbyś wywołać self::getSomething (oraz zrobić $a statyczne) - to jest jedna rzecz.

Druga - pewnie uruchamiasz view.php, zamiast kontrolera.

Trzecia - Twój kod, nawet jeśli uruchomisz kontroler, nie robi absolutnie nic. Uruchamiasz konstruktor i tyle.

0

Dzięki za pomoc. Teraz wszystko zrozumiałem.

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