Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]Pomoc przy optymalizacji klasy
Forum PHP.pl > Forum > Przedszkole
Czapla
Napisałem klasę, która automatycznie generuje nazwy i linki dla danych stron znajdujących się w katalogu.

  1. <?php
  2. class tworzWidok
  3. {
  4.  function pokazMenu()
  5.   {
  6.   $np_nazwa_pliku = array();
  7.    foreach (glob("./strona/*.php") as $np)
  8.    {
  9.     $np_nazwa_pliku[] = strtoupper(substr($np, 9, -4));
  10.    }
  11.   $ls_liczba_stron = count($np_nazwa_pliku);
  12.    for ($i = 0; $i < $ls_liczba_stron; $i++)
  13.     {
  14.      print '<a href=index.php?strona='.$i.'> '.$np_nazwa_pliku[$i].' </a>';
  15.     }
  16.    }
  17.  
  18.  function pokazStrona($s_strona)
  19.   {
  20.   $np_nazwa_pliku = array();
  21.    foreach (glob("./strona/*.php") as $np)
  22.    {
  23.     $np_nazwa_pliku[] = $np;
  24.    }
  25.   $ls_liczba_stron = count($np_nazwa_pliku);
  26.    for ($i = 0; $i < $ls_liczba_stron; $i++)
  27.     {
  28.      switch ($s_strona) {
  29.       case $i:
  30.        include ($np_nazwa_pliku[$i]);
  31.        break;
  32.       }
  33.     }
  34.   }
  35. }
  36. ?>


Przykład wykorzystania
  1. <div id="menu"> //include menu.php;
  2.  <?php
  3.  $widok = new tworzWidok;
  4.  $widok->pokazMenu();
  5.  ?>
  6.  </div>
  7. <div id="tresc"> //include tresc.php;
  8. <?php
  9.  $strona = (int)$_REQUEST['strona'];
  10.  $widok->pokazStrona($strona);
  11. ?>
  12. </div>

Wiem że koncepcji rozwiązania problemu jest tyle co programistów tongue.gif ale być może dało by się bardziej zoptymalizować tą klasę?

Pozdrawiam
Lars
Hmm...mnie się na przykład nie podobają linijki 7-16. Po co robisz tablicę, skoro możesz od razu wyświetlić linki?
U ciebie
  1. <?php
  2. $np_nazwa_pliku = array();
  3.   foreach (glob("./strona/*.php") as $np)
  4.   {
  5.    $np_nazwa_pliku[] = strtoupper(substr($np, 9, -4));
  6.   }
  7.  $ls_liczba_stron = count($np_nazwa_pliku);
  8.   for ($i = 0; $i < $ls_liczba_stron; $i++)
  9.    {
  10.     print '<a href=index.php?strona='.$i.'> '.$np_nazwa_pliku[$i].' </a>';
  11.    }
  12. ?>


Moje
  1. <?php
  2. $i=0;
  3. foreach (glob("./strona/*.php") as $np)
  4.   {
  5.    $np= strtoupper(substr($np, 9, -4));
  6.     print '<a href=index.php?strona='.$i.'> '.$np.' </a>';
  7.     $i++;
  8.    }
  9. ?>


Pozdrawiam
gox
  1. <?php
  2. function pokazMenu() {
  3.      $ls_liczba_stron = count($np_nazwa_pliku);
  4.      for ($i = 0; $i < $ls_liczba_stron; $i++)  {
  5.         print '<a href=index.php?strona='.$i.'> '.strtoupper(basename($np_nazwa_pliku[$i], '.php')).' </a>';
  6.      }
  7.   }
  8. ?>
gox
sorki, dalem ciala:

  1. <?php
  2. function pokazMenu() {
  3.      $i=1;
  4.      foreach (glob("./strona/*.php") as $np) {
  5.           $np = strtoupper(basename($np, '.php'));
  6.         print "<a href=index.php?strona=$i>$np</a>";
  7.         $i++;
  8.      }
  9.   }
  10. ?>
gox
  1. <?php
  2. class tworzWidok {
  3.    # ZOPTYMALIZOWANO! :)
  4.    function pokazMenu() {
  5.        foreach (glob("./strona/*.php") as $i=>$np) {
  6.            $np = strtoupper(basename($np, '.php'));
  7.            print "<a href=index.php?strona=$i>$np</a>";
  8.        }
  9.      }
  10.    function pokazStrona($s_strona='') {
  11.        $lista_plikow = glob("./strona/*.php");
  12.        if ( ! in_array($s_strona, $lista_plikow))
  13.            die('Hacking attempt!');
  14.        include ($lista_plikow[$s_strona]);
  15.    }
  16. }
  17. ?>
Czapla
Gox takiej optymalizacji to ja się nie spodziewałem smile.gif Ale jest błąd, ponieważ twoja klasa nie uwzględnia wartości zmiennej $s_strona większych niż liczba plików tongue.gif
Po wpisaniu wartości np. 187 [takiego pliku w indexie tablicy nie mam] pojawia się błąd tongue.gif

Czyli będzie tak smile.gif Chyba tego się już nie da bardziej skrócić tongue.gif

  1. <?php
  2. class tworzWidok {
  3.  
  4.   function pokazMenu() {
  5.  
  6.       foreach (glob("./strona/*.php") as $i=>$np) {
  7.           $np = strtoupper(basename($np, '.php'));
  8.           print "<a href=index.php?strona=".$i."> ".$np." </a>";
  9.       }
  10.     }
  11.    
  12.   function pokazStrona($s_strona='') {
  13.      $lista_plikow = glob("./strona/*.php");
  14.      $lp_lista_plików = count($lista_plików);
  15.       if ( ! array($s_strona, $lista_plikow))
  16.          die('Hacking attempt!');
  17.          include ($lista_plikow[$s_strona<$lp_lista_plików]);
  18.    }
  19. }    
  20. ?>


Pozdrawiam
gox
Da sie:

  1. <?php
  2. class tworzWidok {
  3.  
  4.  function pokazMenu() {
  5.  
  6.      foreach (glob("./strona/*.php") as $i=>$np) {
  7.          $np = strtoupper(basename($np, '.php'));
  8.          print "<a href=index.php?strona=".$i."> ".$np." </a>";
  9.      }
  10.    }
  11.    
  12.  function pokazStrona($s_strona='') {
  13.     $lista_plikow = glob("./strona/*.php");
  14.      if ( ! array_key_exists($s_strona, $lista_plikow))
  15.         die('Hacking attempt!');
  16.         include ($lista_plikow[$s_strona<$lp_lista_plików]);
  17.   }
  18. }    
  19. ?>
gox
a moze lepiej w ten sposob hmm?

  1. <?php
  2. class tworzWidok {
  3.  
  4. var $files_list = array();
  5.  
  6. function get_files_list() {
  7.    if ( empty($this->files_list))
  8.        $this->files_list = glob("./strona/*.php");
  9.    return $this->files_list;
  10. }
  11.  
  12.  function pokazMenu() {
  13.      foreach ($this->get_files_list as $i=>$np) {
  14.          $np = strtoupper(basename($np, '.php'));
  15.          print "<a href=index.php?strona=".$i."> ".$np." </a>";
  16.      }
  17.    }
  18.    
  19.  function pokazStrona($s_strona='') {
  20.      if ( ! array_key_exists($s_strona, $this->get_files_list))
  21.         die('Hacking attempt!');
  22.         include ($this->get_files_list[$s_strona<$lp_lista_plików]);
  23.   }
  24. }
  25. ?>
gox
czekaj bo znowu dalem ciala...

  1. <?php
  2. class tworzWidok {
  3.  
  4. var $files_list = array();
  5.  
  6. function tworzWidok() {
  7.    if ( empty($this->files_list))
  8.        $this->files_list = glob("./strona/*.php");
  9.    return $this->files_list;
  10. }
  11.  
  12.  function pokazMenu() {
  13.      foreach ($this->files_list as $i=>$np) {
  14.          $np = strtoupper(basename($np, '.php'));
  15.          print "<a href=index.php?strona=".$i."> ".$np." </a>";
  16.      }
  17.    }
  18.    
  19.  function pokazStrona($s_strona='') {
  20.      if ( ! array_key_exists($s_strona, $this->files_list))
  21.         die('Hacking attempt!');
  22.         include ($this->files_list[$s_strona<$lp_lista_plików]);
  23.   }
  24. }
  25. ?>
Czapla
Ta ostatnia jest imo najlepsza zwłaszcza z punku widzenia OOP i rozbijania modelu na mniejsze elementy smile.gif

P.S Pomógł się należy, ale piszesz jako gość ...
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.