![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 21 Pomógł: 0 Dołączył: 13.07.2008 Skąd: Gdynia Ostrzeżenie: (0%) ![]() ![]() |
Hej,
Przepisałem o to taki kod z jednej książek poświęconej programowaniu w PHP w ramach nauki PHP, jednak nie rozumiem pewnych bloków kodu: CODE <?php class Strona { //atrybuty klasy Strona public $zawartosc; public $tytul='TLA Consulting'; public $przyciski=array('Strona glowna'=>'glowna.php', 'Kontakt' =>'kontakt.php', 'Uslugi' =>'uslugi.php', 'Mapa Strony' =>'mapa.php' ); //operacja klasy Strona public function __set($nazwa,$wartosc) { $this->$nazwa=$wartosc; } public function Wyswietl() { echo "<html>\n<head>\n"; $this->WyswietlSlowaKluczowe(); $this->WyswietlStyle(); echo"</head>\n<body>\n"; $this->WyswietlNaglowek(); $this->WyswietlMenu($this->przyciski); echo $this->zawartosc; $this->WyswietlStopke(); echo "</body>\n</html>\n"; } public function WyswietlTytul() { echo "<title>$this->tytul</title>"; } public function WyswietlSlowaKluczowe() { echo "<meta name=\"keywords\" content=\"".htmlentities($this->slowa_kluczowe),"\" />"; } public function WyswietlNaglowek() { ?> <table width="100%" cellpading="12" cellspacing="0" border="0"> <tr bgcolor="black"> <td align="left"><img src="logo.gif" /></td> <td> <h1>TLA Consulting</h1> </td> <td align="right"><img src="logo.gif" /></td> </tr> </table> <? } public function WyswietlMenu($przyciski) { echo "<table width='100%' bgcolor='white' cellpadding='4' cellspacing='4'\n"; echo "<tr>\n"; //obliczenie wielkosci przycisku $szerokosc=100/count($przyciski); foreach ($przyciski as $nazwa=>$url) { $this->WyswietlPrzycisk ($szerokosc, $nazwa, $url, !$this->CzyToAktualnyURL ($url)); } echo "</tr>\n"; echo "</table>\n"; } public function CzyToAktualnyURL($url) { if(strpos($_SERVER['PHP_SELF'], $url)==false) { return false; } else { return true; } } public function WyswietlPrzycisk($szerokosc, $nazwa, $url, $active=true) { if($active) { echo "<td width='".htmlentities($szerokosc)."%'> <a href='".htmlentities($url)."' /> <img src='m-logo.gif' alt='".htmlentities($nazwa)."' border='1'> <a href='".htmlentities($url)."'><span class='menu'>$nazwa</span></a></td>"; } else { echo "<td width='".htmlentities($szerokosc)."%'> <img src='boczne-logo.gif'> <span class='menu'>$nazwa</span></td>"; } } ?> 1. Nie rozumiem czemu służy to $szerokosc=100/count($przyciski); ? 2a. Dlaczego tutaj jeden wskaźnik this jest zawarty w drugim, jakie to ma znaczenie? $this->WyswietlPrzycisk ($szerokosc, $nazwa, $url, !$this->CzyToAktualnyURL ($url)); ? 2b. Jeszcze nie rozumiem tej funkcji foreach. Tutaj jest zmianna $przyciski zapisana jako zmienna $nazwa i … ? (=>$url) ? 3. Co ten blok kodu tutaj sprawdza if(strpos($_SERVER['PHP_SELF'], $url)==false) ? Trochę kodu uciąłem, bo się nie mieścił, ale chyba wycięty kod nie ma znaczenia dla pytań. Ten post edytował art_php 2.03.2009, 20:05:57 |
|
|
![]() |
![]()
Post
#2
|
|
Newsman Grupa: Moderatorzy Postów: 2 033 Pomógł: 290 Dołączył: 21.12.2007 Skąd: Łódź ![]() |
Cytat nie ma odwołania do wskaźnika $this->CzyToAktualnyURL Widocznie tej funkcji (bo jest to funkcja, a nie, jak to nazwałeś, blok kodu) nie jest potrzebna do działania wartość tej składowej. Cytat 2. Wyrzucam kawałki kodu i patrzę co się stanie, żeby takim sposobem zoabczyć zanczneie poszczególnych funkcji. Wyrzuciłem ten fragment i nie było żandej zmiany na stronie, dlaczego? Dlatego, ze instrukcja:
przypisuje zmiennej (a właściwie składowej klasy) o nazwie $nazwa wartość zmiennej $wartosc. Aby zobaczyć coś na ekranie, musiałbyś dopisać jeszcze linijkę odpowiedzialną za wyświetlenie $this->nazwa na ekranie, co pozostawiam Ci jako ćwiczenie (IMG:http://forum.php.pl/style_emoticons/default/smile.gif) BTW konstrukcja $this->$nazwa=$wartosc; jest błędna ($ przed nazwa) Cytat 3. Po za tym doczytałem się w jednym poście na tym forum, że nie należy mieszać kodu HTML z PHP, tak jak tutaj, ale jeśli buduję się strony (to akurat przykład z książki, więc pewnie dlatego jest to połaczony HTML z PHP, w ramach tutorialu) łącząc te dwa języki to co w tym złego? Jeśli to dluga odpowiedź to chętnie poczytam jak ktoś poda tutaj link do podobnego pytania. Generalnie zasada jest taka: odzdzielamy logikę aplikacji od jej warstwy prezentacyjnej (czyli: nie mieszamy kodu odpowiedzialnego za pobieranie/przetwarzanie danych z tym odpowiedzialnym za wyświetlanie rezultatów). Ale myślę, że na tym etapie Twojej nauki jest jeszcze trochę za wcześnie na takie rzeczy. Zresztą, z czasem sam do tego dojdziesz tak naprawdę, pamiętając tylko o jednej zasadzie: osobno logika - osobno prezentacja. |
|
|
![]() ![]() |
![]() |
Aktualny czas: 12.10.2025 - 20:03 |