![]() |
![]() ![]() |
![]() |
![]()
Post
#1
|
|
![]() Grupa: Zarejestrowani Postów: 102 Pomógł: 13 Dołączył: 16.10.2009 Skąd: Łódź Ostrzeżenie: (0%) ![]() ![]() |
Cytat Fatal error: Using $this when not in object context. Powyższy błąd występuje w jedynej linijce z $this ($this->view('mainview.html');), w kodzie podanym powyżej. Ogólnie błąd wydaje się dziwny i nie na miejscu, w końcu używam tego $this w klasie. -.- Wie ktoś jaka jest przyczyna problemu? -------------------- |
|
|
![]()
Post
#2
|
|
![]() Grupa: Zarejestrowani Postów: 2 885 Pomógł: 463 Dołączył: 3.10.2009 Skąd: Wrocław Ostrzeżenie: (0%) ![]() ![]() |
w konstruktorze klasy Main_Controller powinieneś wywołać konstruktor rodzica parent::__construct() (chociaż go nie ma jawnie zdefiniowanego) Pokaż jeszcze jak wywołujesz.
Ten post edytował darko 5.01.2010, 03:10:55 -------------------- Nie pomagam na pw, tylko forum.
|
|
|
![]()
Post
#3
|
|
![]() Grupa: Zarejestrowani Postów: 102 Pomógł: 13 Dołączył: 16.10.2009 Skąd: Łódź Ostrzeżenie: (0%) ![]() ![]() |
Wywołuję za pomocą call_user_func_array(); (i __autoload();). (Framework piszę i nie chcę tu wklejać całego, praktycznie gotowego, kodu.) Main_Controller nie ma konstruktora, bo ma go Controller_Core, a dodanie parent::__construct(); do metody index klasy Main_Controller owocuje poniższym błędem:
Cytat Fatal error: Non-static method Controller_Core::__construct() cannot be called statically. PS. Controller_Core ma konstruktor, tylko go tu nie wklejałem, bo moim zdaniem nie ma po co. Ale na wszelki - pełny kod, włącznie z konstruktorem:
Ten post edytował Meares 5.01.2010, 03:26:53 -------------------- |
|
|
![]()
Post
#4
|
|
![]() Grupa: Zarejestrowani Postów: 2 885 Pomógł: 463 Dołączył: 3.10.2009 Skąd: Wrocław Ostrzeżenie: (0%) ![]() ![]() |
Pokaż jeszcze całe wywołanie za pomocą call_user_func_array bo coś mi tu nie gra, powinno być coś takiego:
A ten błąd: Cytat Fatal error: Non-static method Controller_Core::__construct() cannot be called statically. Na pewno powstał po dodaniu: parent::__construct() ? Ten post edytował darko 5.01.2010, 03:31:38 -------------------- Nie pomagam na pw, tylko forum.
|
|
|
![]()
Post
#5
|
|
![]() Grupa: Zarejestrowani Postów: 102 Pomógł: 13 Dołączył: 16.10.2009 Skąd: Łódź Ostrzeżenie: (0%) ![]() ![]() |
Ehh...
1. Tak, na pewno. 2. Powinna być jeszcze deklaracja klasy ($class = new Main_Controller();), ale od tego mam __autoload();. 3. Jeśli dam w Main_Controller::index(); echo 'x'; zamiast $this->view('mainview.html'); to hula i ten x się wyświetla. Ten post edytował Meares 5.01.2010, 03:36:11 -------------------- |
|
|
![]()
Post
#6
|
|
![]() Grupa: Zarejestrowani Postów: 2 885 Pomógł: 463 Dołączył: 3.10.2009 Skąd: Wrocław Ostrzeżenie: (0%) ![]() ![]() |
No i masz odpowiedź, wywołujesz bez utworzenia instancji, zobacz:
$foo = new Main_Controller(); call_user_func_array(array($foo, "index"), array()); Domyślam się że zamiast call_user_func_array(array($this->controller, $this->action), $this->arguments); powinno byc:
Ten post edytował darko 5.01.2010, 03:37:08 -------------------- Nie pomagam na pw, tylko forum.
|
|
|
![]()
Post
#7
|
|
![]() Grupa: Zarejestrowani Postów: 102 Pomógł: 13 Dołączył: 16.10.2009 Skąd: Łódź Ostrzeżenie: (0%) ![]() ![]() |
2. Powinna być jeszcze deklaracja klasy ($class = new Main_Controller();), ale od tego mam __autoload();. Tia... Dodam jeszce, że __autoload działa prawidłowo, bo jak napisałem wcześniej: 3. Jeśli dam w Main_Controller::index(); echo 'x'; zamiast $this->view('mainview.html'); to hula i ten x się wyświetla. Źle się domyślasz. Cała klasa Vihroll działa prawidłowo. __autoload(); również. Ten post edytował Meares 5.01.2010, 03:40:49 -------------------- |
|
|
![]()
Post
#8
|
|
![]() Grupa: Zarejestrowani Postów: 2 885 Pomógł: 463 Dołączył: 3.10.2009 Skąd: Wrocław Ostrzeżenie: (0%) ![]() ![]() |
Nie wiem jak to do końca jest z wywołaniami za pomocą call_user_func_array ale może spróbuj zrobić z metody view metodę statyczną i statycznie się do niej odwołuj za pomocą parent::view(); w metodzie index. To rozwiązanie jest właściwie pozbawione sensu, ale w tym momencie tylko to mi przychodzi do głowy. Będę musiał to sprawdzić jak to wygląda w praktyce, dziś już za późno, chwilowo poddaję się
![]() Ten post edytował darko 5.01.2010, 03:53:14 -------------------- Nie pomagam na pw, tylko forum.
|
|
|
![]()
Post
#9
|
|
![]() Grupa: Zarejestrowani Postów: 102 Pomógł: 13 Dołączył: 16.10.2009 Skąd: Łódź Ostrzeżenie: (0%) ![]() ![]() |
Ehh... Niby przeszło bez błędu, ale nadal jestem ciekaw czemu wcześniej go wypluło. W końcu kod był w porządku. :/
Apeluję do każdej osoby, która ma jakiś pomył, by go tu opisała. Zachowam aktualne wersje plików coby móc później pokombinować, a tymczasem rozwiążę cały system szablonów w zupełnie inny sposób. -------------------- |
|
|
![]()
Post
#10
|
|
Grupa: Zarejestrowani Postów: 49 Pomógł: 4 Dołączył: 16.07.2008 Skąd: Gdańsk Ostrzeżenie: (0%) ![]() ![]() |
Darko dobrze napisał.
powoduje wywołanie statyczne metody ($this->controller to string). Dynamicznie się wywoła jak przekażesz do funkcji obiekt (czyli $this->controller musi być instancją).I __autoload() nie ma tu nic do rzeczy. Ten post edytował dr4ko 5.01.2010, 10:08:28 -------------------- devFactor
|
|
|
![]()
Post
#11
|
|
![]() Grupa: Zarejestrowani Postów: 102 Pomógł: 13 Dołączył: 16.10.2009 Skąd: Łódź Ostrzeżenie: (0%) ![]() ![]() |
Ahh... Faktycznie. :/
Czyli faktycznie - błędem było nie tworzenie instancji klasy w Vihroll::__construct();. :/ @darko: wybacz niedowiarkowi. ![]() @dr4ko: podziekował. Plusy idą do obu panów. PS. Nie sądzicie, że taka treść błędu trochę dezorientuje? Powinien chyba wyskoczyć jakiś w stylu: Cytat Fatal error: Non-static method Controller_Core::view cannot be called statically.
Ten post edytował Meares 5.01.2010, 12:43:03 -------------------- |
|
|
![]() ![]() |
![]() |
Wersja Lo-Fi | Aktualny czas: 26.04.2025 - 03:57 |