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?
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?
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();
Bazując na Twoim przykładzie co powinna zwracać metoda getSomething()
?
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?
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.
Dzięki za pomoc. Teraz wszystko zrozumiałem.