Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Closed TopicStart new topic
> [PHP]Fatal error: Cannot access private property
szczabik
post 8.09.2009, 12:36:04
Post #1





Grupa: Zarejestrowani
Postów: 226
Pomógł: 1
Dołączył: 13.05.2008

Ostrzeżenie: (0%)
-----


Witam zacząłem pisać classe
Napisałem taki kod

  1. class tag_news
  2. {
  3. private $html;
  4.  
  5. function menu()
  6. {
  7. $this->html .= "<table>";
  8. $this->html .= "<tr>";
  9. $this->html .= "<td><a href='add_tag.php'>Dodaj tag</a></td>";
  10. $this->html .= "</tr>";
  11. $this->html .= "<table/>\n";
  12. }
  13. }

I wywołuje to tak

  1. require_once 'tag_news.class.php';
  2. $tag = new tag_news();
  3. $tag->html->menu();

I wywala błąd
Kod
Fatal error: Cannot access private property tag_news::$html in C:\Program Files\WebServ\httpd-users\obiekt\tag_news.php on line 4

nie wiem czemu. Czy może mi ktoś pomóc co w tym kodzie jest źle ?

Go to the top of the page
+Quote Post
nospor
post 8.09.2009, 12:37:41
Post #2





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




przeczytales chociaz ze zrozumieniem komunikat bledu?

Wiesz co to public, protected,private? Wiesz co one dają dla wlasciwosci/metod klasy? Powinienes przeczytac troche na temat tego za co sie zabierasz.


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
viking
post 8.09.2009, 12:39:59
Post #3





Grupa: Zarejestrowani
Postów: 6 377
Pomógł: 1116
Dołączył: 30.08.2006

Ostrzeżenie: (0%)
-----


Poza tym nie
  1. $tag->html->menu();

tylko
  1. $tag->menu();


--------------------
Go to the top of the page
+Quote Post
blooregard
post 8.09.2009, 12:41:06
Post #4


Newsman


Grupa: Moderatorzy
Postów: 2 033
Pomógł: 290
Dołączył: 21.12.2007
Skąd: Łódź




  1. $tag->html->menu();

Pomijając to, o czym napisał @nospor, to takie odwołanie jest bezsensowne.
Albo odwołujesz się do składowej (jeśli jest taka mozliwość - składowa jest publiczna), albo do metody (analogicznie).
A Ty odwołałeś sie mniej więcej w ten sposób:
klasa->składowa->metoda();



--------------------
Life's simple... You make choices and don't look back...
Go to the top of the page
+Quote Post
szczabik
post 8.09.2009, 12:49:28
Post #5





Grupa: Zarejestrowani
Postów: 226
Pomógł: 1
Dołączył: 13.05.2008

Ostrzeżenie: (0%)
-----


Cytat(nospor @ 8.09.2009, 13:37:41 ) *
przeczytales chociaz ze zrozumieniem komunikat bledu?

Wiesz co to public, protected,private? Wiesz co one dają dla wlasciwosci/metod klasy? Powinienes przeczytac troche na temat tego za co sie zabierasz.



Czytałem.
Modyfikatory:
Public – dostępne zawsze spoza klasy i jej wnętrza.
Private – dostępne jedynie wewnątrz klasy.
Protecet – to samo co wyżej lecz występuje we wszystkich podklasach.

I dałem

  1. public $html;

I niby wszystko jest teraz ok. a wywala błąd
Kod
Fatal error: Call to a member function menu() on a non-object in C:\Program Files\WebServ\httpd-users\obiekt\tag_news.php on line 4


I co jest teraz źle ?

Go to the top of the page
+Quote Post
nospor
post 8.09.2009, 12:51:27
Post #6





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




odpowiedzi masz w poprzednich postach pozostalych userow smile.gif


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
szczabik
post 8.09.2009, 12:57:00
Post #7





Grupa: Zarejestrowani
Postów: 226
Pomógł: 1
Dołączył: 13.05.2008

Ostrzeżenie: (0%)
-----


Cytat(nospor @ 8.09.2009, 13:51:27 ) *
odpowiedzi masz w poprzednich postach pozostalych userow smile.gif



Nie zdarzyłem przeczytać zanim napisałem post. Niby wszystko teraz ok. ale nic nie wyświetla a powinno wyświetlić tabelkę a nic nie wyświetla.

Bo chciałem dodać kolejne funkcje aby pod $html tworzyło cały dokument. Czyli na początku menu a potem funkcje odpowiedzialne ze formularz.

Go to the top of the page
+Quote Post
nospor
post 8.09.2009, 12:59:14
Post #8





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




no ale mysl troche...
przeciez ty tylko przypisuje do $this->html kod ale nic z nim nie robisz. daj na tym glupie echo to zobaczysz to i owo


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
phpion
post 8.09.2009, 12:59:42
Post #9





Grupa: Moderatorzy
Postów: 6 072
Pomógł: 861
Dołączył: 10.12.2003
Skąd: Dąbrowa Górnicza




Cytat(szczabik @ 8.09.2009, 13:57:00 ) *
Niby wszystko teraz ok. ale nic nie wyświetla a powinno wyświetlić tabelkę a nic nie wyświetla.

echo / print questionmark.gif

Moża zanim zaczniesz pisać tą super "classe" to zapoznaj się z podstawami bo wyskakujesz do programowania obiektowego, a podstaw nie masz żadnych.
Go to the top of the page
+Quote Post
szczabik
post 8.09.2009, 13:54:40
Post #10





Grupa: Zarejestrowani
Postów: 226
Pomógł: 1
Dołączył: 13.05.2008

Ostrzeżenie: (0%)
-----


Cytat(phpion @ 8.09.2009, 13:59:42 ) *
echo / print questionmark.gif

Moża zanim zaczniesz pisać tą super "classe" to zapoznaj się z podstawami bo wyskakujesz do programowania obiektowego, a podstaw nie masz żadnych.


Skąd ty możesz wiedzieć czy znam podstawy czy nie. Forum jest pod pomagania a nie od oceniania czy ktoś zna podstawy czy nie. Może podstawy znam tylko akurat sie pogubiłem.

Po za tym chodziło o to by w każdej funkcji nie wywołać return tylko w 1 głównej. W tym przypadku w funckji menu.

I czemu niby twierdzisz że super classa chyba po to się pisze classy by łatwo można było modyfikować kod. I nie potrzebnie powtarzać te same części kodu jak strukturalnie.

Obecnie napisałem tyle ( na razie samo menu ) i niby twierdzisz że jest to bez sensu ? Dlaczego ?
  1. class tag_news
  2. {
  3. public $html;
  4. private $odnosniki = array(
  5. 'Dodaj Tag' => 'add_tag.php',
  6. 'Edytuj Tagi' => 'edit_tag.php',
  7. 'Newsy' => 'news.php'
  8. );
  9. public function menu()
  10. {
  11. $this->html .= "<table>";
  12. $this->html .= $this->odnosnik($align = 'left', $class = 'tbl2');
  13. $this->html .= "<table/>";
  14. return $this->html;
  15. }
  16.  
  17. public function odnosnik($align = 'center', $class = 'tbl')
  18. {
  19. foreach ($this->odnosniki AS $nazwa=>$url){
  20. $this->html .= "<tr>";
  21. $this->html .= "<td align='".$align."' class='".$class."'><a href='".$url."'>".$nazwa."</a></td>";
  22. $this->html .= "</tr>";
  23. }
  24. }
  25. }



Wywołanie
  1. require_once 'tag_news.class.php';
  2. $tag = new tag_news();
  3. echo $tag->menu();


Ten post edytował szczabik 8.09.2009, 13:57:59
Go to the top of the page
+Quote Post
phpion
post 8.09.2009, 14:01:22
Post #11





Grupa: Moderatorzy
Postów: 6 072
Pomógł: 861
Dołączył: 10.12.2003
Skąd: Dąbrowa Górnicza




Odnośnie braku podstaw: wywnioskowałem to po problemach jakie zgłaszałeś (widoczność składowych, brak wyniku na ekranie).
Odnośnie twojej "classy": (dlaczego nie klasy?) jaka jest jej przewaga nad odpowiednikiem napisanym strukturalnie w postaci zwykłej funkcji? W obecnej formie takowej przewagi niestety nie widzę.
Go to the top of the page
+Quote Post
wookieb
post 8.09.2009, 14:04:55
Post #12





Grupa: Moderatorzy
Postów: 8 989
Pomógł: 1550
Dołączył: 8.08.2008
Skąd: Słupsk/Gdańsk




Cytat(phpion @ 8.09.2009, 15:01:22 ) *
Odnośnie twojej "classy": (dlaczego nie klasy?) jaka jest jej przewaga nad odpowiednikiem napisanym strukturalnie w postaci zwykłej funkcji? W obecnej formie takowej przewagi niestety nie widzę.

No dobrze, nie każdy zna od razu założenie OOP ani nie jest ekspertem we wzorcach projektowych i MVC. To, że autor pyta się o takie rzeczy (i nawet komunikat mówi dokładnie co jest nie tak) to lipa ale ten komentarz jest zbędny.


--------------------
Go to the top of the page
+Quote Post
szczabik
post 8.09.2009, 14:31:36
Post #13





Grupa: Zarejestrowani
Postów: 226
Pomógł: 1
Dołączył: 13.05.2008

Ostrzeżenie: (0%)
-----


A mam takie pytanie jeszcze napisałem taki kod
  1. class tag_news
  2. {
  3. public $html;
  4. private $odnosniki = array(
  5. 'Dodaj Tag' => 'add_tag.php',
  6. 'Edytuj Tagi' => 'edit_tag.php',
  7. 'Newsy' => 'news.php'
  8. );
  9. public function menu()
  10. {
  11. $this->html .= "<table>";
  12. $this->html .= $this->odnosnik();
  13. $this->html .= "<table/>";
  14. return $this->html;
  15. }
  16.  
  17. public function odnosnik($align = null, $class = null)
  18. {
  19. foreach ($this->odnosniki AS $nazwa=>$url){
  20. $this->html .= "<tr>";
  21. $this->html .= "<td align='".$align."' class='".$class."'><a href='".$url."'>".$nazwa."</a></td>";
  22. $this->html .= "</tr>";
  23. }
  24. }
  25.  
  26. }


I wywołuje tak
  1. require_once 'tag_news.class.php';
  2. $tag = new tag_news();
  3. echo $tag->menu();

i jak teraz wywołując funkcje menu ustawić atrybuty dla funkcji odnośnik która jest wewnątrz funkcji menu. Próbowałem tak
  1. require_once 'tag_news.class.php';
  2. $tag = new tag_news();
  3. echo $tag->menu($tag->odnosnik($align = 'left'));

ale nie działa

Go to the top of the page
+Quote Post
wookieb
post 8.09.2009, 15:00:52
Post #14





Grupa: Moderatorzy
Postów: 8 989
Pomógł: 1550
Dołączył: 8.08.2008
Skąd: Słupsk/Gdańsk




No bo naprawdę nie znasz podstaw. A szczególnie podstaw funkcji http://pl2.php.net/manual/pl/functions.arguments.php


--------------------
Go to the top of the page
+Quote Post
erix
post 8.09.2009, 15:28:01
Post #15





Grupa: Moderatorzy
Postów: 15 467
Pomógł: 1451
Dołączył: 25.04.2005
Skąd: Szczebrzeszyn/Rzeszów




Cytat
Skąd ty możesz wiedzieć czy znam podstawy czy nie. Forum jest pod pomagania a nie od oceniania czy ktoś zna podstawy czy nie. Może podstawy znam tylko akurat sie pogubiłem.

Nie trzeba wiedzieć, wystarczy popatrzeć, o co pytasz. Zapraszam do lektury manuala, wówczas będziemy mogli porozmawiać.


--------------------

ZCE :: Pisząc PW załączaj LINK DO TEMATU i TYLKO w sprawach moderacji :: jakiś błąd - a TREŚĆ BŁĘDU? :: nie ponaglaj z odpowiedzią via PW!
Go to the top of the page
+Quote Post

Closed TopicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 12.06.2025 - 10:33