Polimorfizm w PHP na cztery sposoby

Ucząc się na testy programowania oop w PHP natrafiłem na ciekawy temat jakim jest polimorfizm. Z racji tego, że mało było tematów na ten temat w języku Polskim postanowiłem troszkę ułatwić naukę przyszłym programistom szukającym jakiś materiałów na temat polimorfizmu i nawet podzielić go na kategorie. Nie spotkałem się z takim podziałem, więc mam nadzieję, że dobrze zrobiłem dzieląc go na cztery kategorie. Uważam takie stworzenie kategorii za łatwiej zrozumiałe i przejrzyste do dalszej nauki.

1. Polimorfizm Interfejsowy

2. Polimorfizm Abstrakcyjny

3. Polimorfizm Traits

4. Polimorfizm Dziedziczony

Jeżeli uważacie inaczej, dajcie znać, a wezmę wasze uwagi pod uwagę.

Pierwszym przedstawionym prze zemnie polimorfizmem w PHP, jest tradycyjny opierający się na interfejsie polimorfizm interfejsowy. Implementujemy interfejs z naszymi metodami do każdej klasy gdzie mają być wykorzystane. Dokładnie widać to na przykładzie poniżej.

Przykład 1 Polimorfizm Interfejsowy:

tytul;
      }
    
   public function setTytul($tytul){   
      $this->tytul = $tytul;
      }
    
  public function getAutor(){   
    return  $this->autor;
      }
    
   public function setAutor($autor){   
      $this->autor = $autor;
      }
}

class Komiks implements Ksiegarnia{
   
   public function getTytul(){ 
    return  $this->tytul;
      }
    
   public function setTytul($tytul){ 
      $this->tytul = $tytul;
      }
    
  public function getAutor(){   
    return  $this->autor;
      }
              public function setAutor($autor){   
      $this->autor  =  $autor;
      }

$tytulBook = "Manager Wydobycia";
 $cenaBook = "100 zł";
 $autorBook = "Adam Berger";

####### Book ########
 
 $book1 = new Book();

 $book1->setTytul($tytulBook);
 // Tytul
 echo $book1->getTytul()."
";
 
  $book1->setAutor($autorBook);
 // Autor
 echo $book1->getAutor()."
";

  $book1->setCena($cenaBook);
   // Cena 
 echo $book1->getCena()."
";

####### Komiks ########
$tytulKomiks = "Komiks Manager Wydobycia";
 $autorKomiks = "Adam Berger Komiks";
 $cenaKomiks = "10 zł";
  $komiks1 = new Komiks();
 $komiks1->setTytul($tytulKomiks);
 // Tytul
 echo $komiks1->getTytul()."
";
 
  $komiks1->setAutor($autorKomiks);
 // Autor
 echo $komiks1->getAutor()."
";
  $komiks1->setCena($cenaKomiks);
   // Cena 
 echo $komiks1->getCena()."
";
?>

Drugi przykład polimorfizmu przedstawia polimorfizm abstrakcyjny, dziedziczenie po klasie abstrakcyjnej i praktycznie niczym się nie różni od pierwszego przykładu z tym, że do klasy abstrakcyjnej możemy dodać jeszcze kolejne cechy potrzebne w dalszej pracy z programem. Możemy na przykład wykorzystać opisany polimorfizm klasy abstrakcyjnej w czwartym przykładzie, dodając go do klasy abstrakcyjnej.

Przykład 2 Polimorfizm Abstrakcyjny:

tytul;
   }
   
   public abstract function setAutor($autor);
   public function getAutor(){
   
   return  $this->autor;
   }
   
   public abstract function setCena($cena);
   public function getCena(){
   
   return  $this->cena;
   }
 }
 
 class Book extends Ksiegarnia{
 
    public function setTytul($tytul){
       
      $this->tytul = $tytul;
      }
    
  public function setAutor($autor){
       
      $this->autor = $autor;
      }
    public function setCena($cena){
     
     $this->cena = $cena;
      }  
 }
 
 class Komiks extends Ksiegarnia{
 
    public function setTytul($tytul){
       
      $this->tytul = $tytul;
      }
    
  public function setAutor($autor){
       
      $this->autor = $autor;
      }
    public function setCena($cena){
     
     $this->cena = $cena;
      }  
 }


 ####### Book ########
 
 $tytulBook = "Book Manager Wydobycia";
 $autorBook = "Adam Ber Book";
 $cenaBook  = "10 zł";
 
   $book1 = new Book();
  
   $book1->setTytul($tytulBook);
 // Tytul
 echo $book1->getTytul()."
";
 
   $book1->setAutor($autorBook);
 // Autor
 echo $book1->getAutor()."
";
 
  $book1->setCena($cenaBook);
   // Cena 
 echo $book1->getCena()."

";
 
  ####### Komiks ########
 
 $tytulKomiks = "Komiks Manager Wydobycia";
 $autorKomiks = "Adam Ber Komiks";
 $cenaKomiks  = "5 zł";
 
   $komiks1 = new Komiks();
  
   $komiks1->setTytul($tytulKomiks);
 // Tytul
 echo $komiks1->getTytul()."
";
 
  $komiks1->setAutor($autorKomiks);
 // Autor
 echo $komiks1->getAutor()."
";
 
  $komiks1->setCena($cenaKomiks);
   // Cena 
 echo $komiks1->getCena()."

";
?>

Kolejnym przykładem poliformizmu w PHP, jest przykład polegający na wykorzystaniu polimorfizm traits. Zauważmy , jak podczas tak wykonanemu programowi zmniejsza się ilość kodu potrzebnego do przedstawienie praktycznie tego samego co w poprzednim przykładzie.

Przykład 3 Polimorfizm Traits:

tytul;  
      }
    
   public function setTytul($tytul){
       
      $this->tytul = $tytul;    
      }
  // Autor  
  public function getAutor(){
       
    return  $this->autor;
      }
    
   public function setAutor($autor){
       
      $this->autor = $autor;
      }
    // Kategoria 
    public function getKategoria(){
       
    return  $this->kategoria;
      }
    
   public function setKategoria($kategoria){
       
      $this->kategoria = $kategoria;
      }
    
  // Cena  
  public function getCena(){
     
     return  $this->cena;
   }
    public function setCena($cena){
     
     $this->cena = $cena;
   }
   // Gdzie znajduje się w Księgarni
   public function getPolka(){
    
    return $this->polka;
     } 
  
  public function setPolka($polka){
    
     $this->polka = $polka;  
  } 
 }
 
 trait Ksiegarnia_nr_Isbn {
 
   public $isbn;
   
    public function getISBN(){
       
    return  $this->isbn;
   }
   
  public function setISBN($isbn){
        $this->isbn = $isbn;
    } 
 }
 
 trait Ksiegarnia_Wiek_Gracza{
 
  public $wiekGraczy;
   
  public function getWiekGraczy(){
       
    return  $this->wiekGraczy;
   }
   
  public function setWiekGraczy($wiek){
        $this->wiekGraczy = $wiek;
    }
 }
 
  class Book{
    use Ksiegarnia, Ksiegarnia_nr_Isbn; 
  
  }
  
  class Komiks{
     use Ksiegarnia, Ksiegarnia_nr_Isbn;
   
   public $figurka;
    
   public function getKomiksZFigurka(){
       
    return  $this->figurka;
    
   }
   
  public function setKomiksZFigurka($figurka){
        $this->figurka = $figurka;
    }
   }
  
  class GryPC{
    use Ksiegarnia, Ksiegarnia_Wiek_Gracza;
  
  }
  
  class GryLinux{
    use Ksiegarnia, Ksiegarnia_Wiek_Gracza; 
  
  
  }

####### Book ########
 $tytulBook = "Book Manager Wydobycia";
 $autorBook = "Adam Ber Book";
 $cenaBook = "10 zł";
 $isbnBook = "ISBN: 34523211345546456456456";
 $kategoriaBook = "Informatyka";
 $polkaBook = "Półka nr 14 ";
  $book1 = new Book();
  
 $book1->setTytul($tytulBook);
 // Tytul
 echo $book1->getTytul()."
";
 
  $book1->setAutor($autorBook);
 // Autor
 echo $book1->getAutor()."
";
 
  $book1->setCena($cenaBook);
   // Cena 
 echo $book1->getCena()."
";
 
    $book1->setISBN($isbnBook);
     // nr ISBN
 echo $book1->getISBN()."
";
$book1->setKategoria($kategoriaBook);
 // kategoria
 echo $book1->getKategoria()."
";
 $book1->setPolka($polkaBook);
 // która półka
 echo $book1->getPolka()."
";
 ####### Komiks ########
 
 $tytulKomiks = "Komiks Manager Wydobycia";
 $autorKomiks = "Adam Ber Komiks";
 $cenaKomiks = "5 zł";
 $isbnKomiks = "ISBN: 99995345546456456456";
 $kategoriaKomiks = "Kajko i Ko";
 $polkaKomiks = "Półka nr 15 ";
 $figurka     = "Prezent do komiksu";
 
  $komiks1 = new Komiks();
  
 $komiks1->setTytul($tytulKomiks);
 // Tytul
 echo $komiks1->getTytul()."
";
 
  $komiks1->setAutor($autorKomiks);
 // Autor
 echo $komiks1->getAutor()."
";
 
  $komiks1->setCena($cenaKomiks);
   // Cena 
 echo $komiks1->getCena()."
";
 
    $komiks1->setISBN($isbnKomiks);
     // nr ISBN
 echo $komiks1->getISBN()."
";
 $komiks1->setKategoria($kategoriaKomiks);
 // kategoria
 echo $komiks1->getKategoria()."
";
 $komiks1->setKomiksZFigurka($figurka);
     // Prezent do komiksu 
 echo $komiks1->getKomiksZFigurka()."
";;
  
 $komiks1->setPolka($polkaKomiks);
 // która półka
 echo $komiks1->getPolka()."
";
##### Gry PC ########
 $tytulPC = "Gra PC Manager Wydobycia";
 $autorPC = "Adam Ber Gra PC";
 $cenaPC = "1 zł";
 $wiekGraczyPC = "Od 14 Lat";
 
 
$gryPc = new GryPC();
$gryPc->setTytul($tytulPC);
 // Tytul
 echo $gryPc->getTytul()."
";
 
 $gryPc->setAutor($autorPC);
 // Autor
 echo $gryPc->getAutor()."
";
 
 $gryPc->setCena($cenaPC);
   // Cena 
 echo $gryPc->getCena()."
";
$gryPc->setWiekGraczy($wiekGraczyPC);
   // Wiek Graczy 
 echo $gryPc->getWiekGraczy()."
";
?>

Kolejny przykład czwarty z kolei polega na dziedziczeniu klasy i przesłanianie metody odziedziczonej. Jest to polimorfizm dziedziczony i przesłaniany w klasie docelowej. Także zmniejszamy tym samym ilość kodu potrzebnego do uruchomienia programu przedstawionym w pierwszym przykładzie. Część metod pozostaje w pierwszej klasie, które podczas użycia są przesłaniane danymi z klasy docelowej.

Przykład 4 Polimorfizm Dziedziczony:

tytul;
      }
    
   public function setTytul($tytul){
       
      $this->tytul = $tytul;
      }
  // Autor  
  public function getAutor(){
       
    return  $this->autor;
      }
    
   public function setAutor($autor){
       
      $this->autor = $autor;
      }
 }
 
 class Book extends Ksiegarnia{
 
    public function setTytul($tytul){
       
      $this->tytul = $tytul;
      }
    
  public function setAutor($autor){
       
      $this->autor = $autor;
      }
 }

 ####### Book ########
 
 $tytulBook = "Book Manager Wydobycia";
 $autorBook = "Adam Ber Book";
 
   $book1 = new Book();
  
 $book1->setTytul($tytulBook);
 // Tytul
 echo $book1->getTytul()."
";
 
  $book1->setAutor($autorBook);
 // Autor
 echo $book1->getAutor()."
";
?>

Oczywiście każda klasa powinna mieć swoje indywidualne cechy, tylko dla niej samej ponieważ inaczej nie było by sensu robić osobnych klas jak book, czy komiks. Można wtedy zrobić jedną klasę i dane tam zawarte zwracać dla book i komiks bez wykonywania osobnych klas. Dzieje się tak dla tego , że w klasie nic się nie zmienia oprócz samej nazwy klasy. Metody i zmienne pozostają takie same no chyba, że zależy nam na takich właśnie nazwach klas i ich wywoływania w takiej postaci.

Polimorfizm w PHP na cztery sposoby-GITHUB

Class PHP CompareFile

Chciałem wam zaprezentować nową klasę, którą stworzyłem do porównywania plików z danego folderu z plikiem tekstowym, w którym podajemy pliki do usunięcia lub do pozostawienia. __construct( $file1, $file2, $numeric ); Wszystko do ustawienia w parametrze wejściowym do klasy. Klasa bardzo prosta a jak nie kiedy potrzebna może wam się przyda na coś

Link do download na github Github class php CompareFile

Plik CompareFile.php



 * Porównuje pliki z wybranego folderu z plikiem tekstowym, zawierającym podaną ścieżkę do pliku.
 * Pliki nie znajdujące się na liście usuwa z podanego folderu. 
 *  0 usuń pliki wskazane w pliku tekstowym
 *  1 zachowaj pliki wskazane w pliku tekstowym
 *******************************************************************************************
 * Compares files from the selected folder with a text file containing the specified path to the file.
 * Files that are not in the list are removed from the specified folder.
 * 0 delete the files indicated in the text file
 * 1 keep the files indicated in the text file
 */
   public $file1;
   public $file2;
   private $numeric;
   public $error = array();
   private $Tab  = array();
   private $Tab1 = array();
     /**
      *  _construct( $file1, $file2, $numeric )
      *  string $file1 lokalizacja pliku tekstowego
      *  string $file2 lokalizacja plików
      *  int $numeric wybór zadania
      *  return null
      *  0 usuń pliki wskazane w pliku tekstowym
      *  1 zachowaj pliki wskazane w pliku tekstowym
      */
      public function __construct( $file1, $file2, $numeric ){
             $this->file1 = $file1;
             $this->file2 = $file2;
       
     if(is_numeric($numeric)){
         
    $this->numeric = $numeric; 
         
     }else{
       
    $this->error[] = " Podaj prawidłowy parametr Numerik "; 
      
     }   
         }
   /**
   * string $file1
   * sprawdzenie czy plik znajduje się w podanej ścieżce 
   * return boolea
   */
      private function check_dir($file){
     
   //if(file_exists($file1) && is_dir($file1)){
       if(file_exists($file)){
       
         return true;
     
         }else{
     $this->error[] = " Błędna lokalizacja pliku lub folderu ";
          // throw new Exception(" Błędna lokalizacja pliku lub folderu ");
         return false;
          }
       }
        /**
          * plik tekstowy
          * obiekt string $this->file1
          * obiekt array() $this->error
          * obiekt array() $this->Tab
          */
       public function load_text_file(){
           if($this->check_dir($this->file1)){   
                if(is_array(file($this->file1))){
         // czyścimy trim ze śmieci
         $this->Tab = explode(",",implode(',', array_map('trim', file($this->file1))));
                  }else{
                    $this->error[] =" Tablica jest pusta ";
                   }
              }else{
  
               //throw new Exception("Błędna lokalizacja pliku tekstowego");
                 $this->error[] =" Błędna lokalizacja pliku tekstowego ";
              }
        }
     /**
      * obiekt string  $this->file1
      * obiekt array() $this->error
      * obiekt array() $this->Tab1
      */
      public function load_dir(){
           if($this->check_dir($this->file2)){
                // $dir  = dirname(__FILE__) .'/pliki';
        $this->Tab1 = array_diff(scandir($this->file2), array('..', '.'));
                // $this->Tab1 = scandir($this->file2);
              }else{
               //throw new Exception("Błędna lokalizacja pliku tekstowego");
              $this->error[]  =" Błędna lokalizacja pliku tekstowego ";
           }
        }
   /**
    *
    * obiekt array() $this->Tab1
    * obiekt array() $this->Tab
    * obiekt $this->file2
    * obiekt $this->numeric
    * array() $zle_usun
    * array() $dobre
    */
       public function compare_file(){
        if(is_array($this->Tab1)){
    //print_r($this->Tab1);
     //Var_dump($this->Tab);
    // Var_dump($this->Tab1);
    
         foreach($this->Tab1 as $spr){
     
    if(in_array( $spr, $this->Tab )){
                  // echo $spr;
                    $dobre[] = $spr;
    // numeric 0 
    if($this->numeric == 0){
    //  $wyn  = array_merge($this->Tab[0], $this->Tab1);        
                         //  $wyn1 = array_unique( $wyn );
     if($this->check_dir($this->file2)){
                     unlink($this->file2."/".$spr);
              }
           }
                }else{
        // numeric 1 
    if($this->numeric == 1){
                   $zle_usun[] = $spr;
    // Usuwamy pliki zbędne
         //array_map( "unlink", glob(dirname(__FILE__) .'/pliki/*'.$plik.'.clu') );
     if($this->check_dir($this->file2)){
                     unlink($this->file2."/".$spr);
              }
         }
                }
         
       
     }
             } else {
           $this->error[] =" Tablica jest pusta ";
          }
          
         if(!empty($dobre) || !empty($zle_usun)){
      
          $this->error[] ="Usunięto Wszystko OK  "; 
     }else{
    // throw new Exception("Tablica jest pusta");
     $this->error[] =" Usunięto ";
       }     
        }
     /**
      * obiekt string $this->error
      * return obiekt string $this->error
      */
      public function Error(){
          if(!empty($this->error)){
        
       return $this->error;           
            }
    }
}
?>

Plik index.php


load_text_file();
  $pliki->load_dir();
  $pliki->compare_file();
  
  // Wypisujemy błędy
   echo $pliki->Error()[0];
?>

Class Language

Class Language

Od pewnego czasu szukałem klasy, która była by odpowiednia do mojego projektu, postanowiłem wprowadzić dwu języczność. Poszukiwania nie przyniosły zadowalających efektów, które chciałem osiągnąć. Wykonałem klasę, którą nazwałem "Class Language". Klasa bardzo lekka, przejrzysta i bardzo wydajna zero zamuleń. Do "Class Language” można podpiąć dowolną ilość języków, które ma obsługiwać, cała treść tłumaczenia znajduje się w osobnym pliku nazwanym lang.ini, dane w nim się znajdujące są importowane do metody i tam przetwarzane w zależności od języka, jaki na chwilę obecną używamy.

Samo używanie jest banalnie proste sprowadza się do podania języka, jaki ma obowiązywać w danym momencie podajemy go, jako liczby 1 to polski 2 to angielski itd. trzeba zachować tylko jedną regułę w pliku .ini musimy podawać takie same nazwy dla poszczególnych języków.

Jeżeli język polski to w pliku lang.ini tablica [pl] jak angielski to tablica [en] jak czeski to tablica [cz] itd. Następną zmienną, którą należy podać do klasy jest położenie pliku lang.ini z naszymi tłumaczeniami podajemy ścieżkę do pliku. No i już na koniec pozostaje nam tylko określenie słów do tłumaczenia, przez odpowiednią metodę $lang->_lang("ZALOGUJ"); albo $lang->_lang("WYLOGUJ");

Jak wspomniałem wyżej klasa bardzo prosta i wydajna nie powinna przysporzyć w obsłudze żadnych problemów, życzę udanego użytkowania.

 

 

index.php



     require_once('class_lang.php'); 
/* Okresl ktory jezyk "1" to polski "2" to angielski */
/* Specify which language "1" is the Polish "2" is an English */
        $file="lang.ini"; 
        $pl=1; 
        $en=2; 
        $lang = new class_lang($en, $file); 
    echo $lang->_lang("ZALOGUJ");    
    echo $lang->_lang("WYLOGUJ");
lang.ini
 [pl]
 ZALOGUJ= "Zaloguj PL"
 WYLOGUJ= "Wyloguj PL"
 [en]
 ZALOGUJ= "Zaloguj EN"
 WYLOGUJ= "Wyloguj EN"
class_lang.php

 class class_lang{ 
     
   private $whatlang; 
   private $lang      = array(1=>"pl", 2=>"en", 3=>"cz", 4=>"br"); 
   private $lang_tabl = array(); 
   private $pl        = array(); 
           
     
    public function __construct($whatlangg, $file){ 
           if(file_exists($file)){ 
            $this->lang_tabl = parse_ini_file($file, true); 
           }else{ 
             die("Brak Pliku lang.ini"); 
           } 
           if(!empty($whatlangg)){ 
           $this->whatlang = $this->lang[(int)$whatlangg];     
           }else{ 
            die("Brak okreslonego jezyka"); 
           }        
      } 
 
    private function lang(){  
        if(!empty($this->whatlang)){ 
         return $this->whatlang;  
        }else{ 
         return "pl";  
        }          
    } 
      
    private function multi_lang($param){ 
      $this->pl = $this->lang_tabl[$param];    
    }  
 
    private function get_multi_lang(){ 
        return $this->pl; 
    } 
      
    public function _lang($langgg){   
           $this->multi_lang($this->lang()); 
           if($lan = $this->get_multi_lang()){ 
               return $lan[$langgg]; 
           } 
     }        
}

 

 

 

{jcomments on}

Class modify date and time

Potrzebowałem klasy do obsługi czasu w PHP więc ją wykonałem.

Od jakiegoś czasu zajmowałem się projektem z dużą ilością danych zapisywanych w dwóch formatach do bazy danych i jeszcze parę innych, jak można tak napisać. Jeden unixsowy, a drugi mysql (tradycyjny).  Ciągłe zmienianie się zapisów do bazy danych, a to w jednym formacie, a to w drugim doprowadzało mnie do pi…pi…pi.  Postanowiłem zrobić klasę, która te wszystkie rzeczy będzie miała w sobie i będzie obsługiwać nie tylko konwersję pomiędzy formatami,  ale także jeszcze wyświetlała całą datę z polskimi dniami jak też z polskimi miesiącami. Ponadto potrzebowałem modyfikowania tej daty albo dodawanie albo odejmowanie dni miesięcy lat, a także czasu godzin, sekund, minut. Tak właśnie powstała klasa którą nazwałem modify_date_and_time czyli modyfikuj datę i czas. Myślę że nie jednemu z was się przyda do pracy, albo do zabawy.

 Wywołanie banalnie proste określamy datę i potem używamy tych metod które są nam potrzebne np. żeby przekonwertować datę na czas unixsowy wystarczy taki kawałek kodu:

 

                      

            
        $KK = new  modify_date_and_time();
	$KK->set_dates('2015-01-03 08:09:11');
	## czas mysql zmienia na uniksowy  ##
        echo  $KK->format_unix().'
';
	## czas uniksowy zmienia na mysql  ##
	$unix = new  modify_date_and_time();
	$unix->set_dates('1420268951');
echo '
'.$unix->format_mysql().'
';

Jeżeli natomiast chcemy całą datę z polskimi miesiącami to tak:

 

        $KK = new  modify_date_and_time();
	$KK->set_dates('2015-01-03 08:09:11');
	## Cała data z nazwami dni i miesięcy ##
   echo $KK->data_all($cale_nazwy=1).'
';

Możemy wyświetlać zmodyfikowaną całą datę jak też pojedyńcze wartości zmodyfikowane jak i nie zmienione.

 Klasa pozwala zrobić odlicznie od data-poczatek do data-koniec pokazuje ile pozostało lat, miesięcy, tygodni i dni.

Całość co potrafi klasa poniżej.

modify_date_and_time.php

/** 
* PHP 5.1
* @version v1 modify_date_and_time
* @license Apache License, Version 2.0.
* @author Adam Berger <ber34#o2.pl>
* @Site www.joomla-cms.com.pl
*/

Class modify_date_and_time{

	 private $years;
	 private $month;
	 private $day;
	 private $hour;
	 private $minutes;
	 private $seconds;
	 private $data_czas;
	  
	  
	public function __construct(){
	  $this->dates= new DateTime();
	}
	
	 public function data_day($plu_min, $day){
      $this->dates->modify( $plu_min.$day.' day' );
      return $this->dates->format('d');
  }
 
     public function data_month($plu_min, $month){
      $this->dates->modify( $plu_min.$month.' month');
      return $this->dates->format('m');
  }
  
     public function data_year($plu_min,$year){
     $this->dates->modify( $plu_min.$year.' years' );
      return $this->dates->format('Y'); 
  }
  
  
  	 public function time_hour($plu_min, $hour){
      $this->dates->modify( $plu_min.$hour.' hour' );
     // return date('G', strtotime($plu_min.$hour.' hour'));  
	   return $this->dates->format('G');
  }
 
     public function time_minute($plu_min, $minutes){
      $this->dates->modify( $plu_min.$minutes.' minutes');
      return $this->dates->format('i');
  }
  
     public function time_seconds($plu_min, $seconds){
      $this->dates->modify( $plu_min.$seconds.' seconds' );
      return $this->dates->format('s');  
  }
  
   
   public function set_dates($praca){
         $this->format = $praca;
		 $jj = preg_split('/[-: ]/', $this->format);
		 if(!empty($jj[2])){
		  		 $this->years =$jj[0];
				 $this->month =$jj[1];			 
				 $this->day   =$jj[2];
				  }
		if(!empty($jj[3])){  
				 $this->hour  = $jj[3];
				 $this->minutes =$jj[4];
				 $this->seconds =$jj[5]; 
				 }
	   }
   
       public function format_mysql(){
	##  format MySQL  ##
      return date('Y-m-d H:i:s', $this->format);
  }
  
  public function format_unix(){
	##  format unixsowy  ##
      return strtotime($this->format);  
  }
   
   
      public function get_years(){ 
		  		return $this->years; 
	   }
   
   public function get_month(){
		  		return $this->month;
	   }
	   
	public function get_day(){ 
		  		return $this->day;  
	   }

	   
	 public function get_hour(){
		  		return $this->hour; 
	   }

	 public function get_minutes(){ 
		  		return $this->minutes; 
	   }

	 public function get_seconds(){ 
		  		return $this->seconds;  
	   }  
   
   
  
	public function data_modifi(){
	 return  $this->dates->setDate($this->years, $this->month, $this->day); 
	   }
	   
	 public function time_modifi(){
	   return $this->dates->setTime($this->hour, $this->minutes, $this->seconds); 
	  }
	  
	  ## data mysql 2015-01-03 08:09:11 ##
	  ## parametr nazwy skrócone czy czałe ##
	 public function data_all($cale_nazwy=1){

   if($cale_nazwy === 1){
      $dni = array('niedziela','poniedziałek','wtorek','sroda','czwartek','piątek','sobota');

	  $miesiace = array(1 => 'styczeń',2 => 'luty',3 => 'marzec',4 => 'kwiecień',5 => 'maj',6 => 'czerwiec',7 => 'lipiec',
		              8 => 'sierpień',9 => 'wrzesień',10 => 'październik',11 => 'listopad',12 => 'grudzień');
   
   }else{
   	$dni = array('nie','pon','wto','sro','czw','pią','sob');

	$miesiace = array(1 => 'sty',2 => 'lut',3 => 'mar',4 => 'kwi',5 => 'maj',6 => 'cze',7 => 'lip',
		              8 => 'sie',9 => 'wrz',10 => 'paź',11 => 'lis',12 => 'gru');
   }
	   $czas = ' '.$dni[$this->dates->format('w')];
	   $czas.= ' '.$this->dates->format('d');
	   $czas.= ' '.$miesiace[$this->dates->format('n')];
	   $czas.= ' '.$this->dates->format('Y');
	
       return $czas .= ' r. Godzina '.$this->dates->format('H:i:s');
	} 
	
	
	## sprawdzamy ile dni pozostało ##
	## $param może być 1 albo 2 albo  albo 3 albo 123 albo 12 albo 13 albo 23
    ## Jeżeli data end jest pusta to liczy do obecnego czasu ##

    public function set_date_start_end($param, $data_end){

	$data_end = strtotime($data_end);
	
 if(in_array(1,$param)){
    $zostalo_dni = ' Dni '.floor(($data_end - $this->format_unix())/ 86400);
 }else{$zostalo_dni=null;}
 
 if(in_array(2,$param)){
    $zostalo_tygodni = ' Tygodni '.floor(($data_end - $this->format_unix())/ 604800);
 }else{$zostalo_tygodni=null;}
 
 if(in_array(3,$param)){
     $zostalo_miesiecy = ' Miesięcy '.floor(($data_end - $this->format_unix())/ 2592000);
   }else{$zostalo_miesiecy=null;}
   
   if(in_array(4,$param)){
    $zostalo_lat =' Lat '.floor(($data_end - $this->format_unix())/ 31104000);
   }else{$zostalo_lat=null;}

   $this->data_czas = 'Pozostało '. $zostalo_dni.$zostalo_tygodni.$zostalo_miesiecy.$zostalo_lat;
   	 
}

public function set_date_time_start_end($param, $data_end){

      $data_end = new DateTime($data_end);
     
         $diff  = $this->dates->diff($data_end);


 if(in_array(1,$param)){
    $zostalo_dni = ' Dni '.floor($diff->format("%d"));
 }else{$zostalo_dni=null;}
  
 if(in_array(2,$param)){ 
    $zostalo_tygodni = ' Tygodni '.floor(strtotime($diff->format("%Y-%m-%d"))/604800);
 }else{$zostalo_tygodni=null;}
  
 if(in_array(3,$param)){
     $zostalo_miesiecy = ' Miesięcy '.floor($diff->format("%m"));
   }else{$zostalo_miesiecy=null;}
    
   if(in_array(4,$param)){ 
    $zostalo_lat =' Lat '.floor($diff->format("%Y"));
   }else{$zostalo_lat=null;} 

   if(in_array(5,$param)){
    $zostalo_godzn =' Godzin '.floor($diff->format("%H")); 
   }else{$zostalo_godzn=null;} 
    
   if(in_array(6,$param)){ 
    $zostalo_minut =' Minut '.floor($diff->format("%i"));
   }else{$zostalo_minut=null;}
    
   if(in_array(7,$param)){
    $zostalo_sekund =' Sekund '.floor($diff->format("%s"));
   }else{$zostalo_sekund=null;}
   //$this->data_time_czas =  $diff->format("%Y-%m-%d %H:%I:%S");
     $this->data_time_czas = 'Pozostało '. $zostalo_dni.$zostalo_tygodni.$zostalo_miesiecy.$zostalo_lat.$zostalo_godzn.$zostalo_minut.$zostalo_sekund;
}

   public function get_date_time_start_end(){ 
         return $this->data_time_czas; 
     }
	 public function get_date_start_end(){
	     return $this->data_czas;
	 }
}

index.php



 $KK = new  modify_date_and_time();
		## czas start normalny ##
		$KK->set_dates('2015-01-03 08:09:11');
		## Co pokazać 1 = dni 2 = tygodnie 3 = Miesiące 4 = lata ##
		$param=array(1,2,3,4,5,6,7);
		                       ## czas koniec##
		     $KK->set_date_start_end($param, '2018-01-03 08:09:11');
		echo $KK->get_date_start_end().'
';
		
               ##  Cała data i czas ##
               $KK->set_date_time_start_end($param, '2018-01-03 08:09:11'); 
          echo $KK->get_date_time_start_end().'
'; 


	     ## Rok nie zmodyfikowany ##  
     echo $KK->get_years().'
'; 
     ## Miesuiąc nie zmodyfikowany ##
     echo $KK->get_month().'
';
	 ## Dzień nie zmodyfikowany ##
    echo $KK->get_day().'
';
     ##Godzina nie zmodyfikowana ##
    echo $KK->get_hour().'
';
     ## Minuty nie zmodyfikowane ##
    echo $KK->get_minutes().'
';
      ## Sekundy nie zmodyfikowane ##
   echo $KK->get_seconds().'
';

		## Cała data z nazwami dni i miesięcy ##
		 echo $KK->data_all($cale_nazwy=1).'
';
		
	## czas mysql zmienia na uniksowy  ## 
      echo  $KK->format_unix().'
';
		
 ## Date ##
 $KK->data_modifi();
 $year=8;
 $month=2;
 $day =19;
 
  echo $KK->data_year('-', $year);
  echo $KK->data_month('+', $month);
  echo $KK->data_day('-', $day);
 
 ## time ##
 $KK->time_modifi();
 $hour=10;
 $minute=5;
 $seconds= 10;
 
  echo $KK->time_hour('+', $hour);
  echo $KK->time_minute('-', $minute);
  echo $KK->time_seconds('+', $seconds);
    
	
	## czas uniksowy zmienia na mysql  ## 
	$unix = new  modify_date_and_time();
	$unix->set_dates('1420268951');
    echo '
'.($unix->format_mysql()).'
';




A to efekt końcowy:


 

 

Error log

Error Log

 

Od pewnego czasu potrzebowałem klasy do zapisywania błędów do pilków a także żeby ważniejsze informacje były wysyłane na e-mail.
Więc wykonałę taką klasę oparłę ją o gotową funkcję php w celu ułatwienia sobie pracy. Efekt można zobaczyć poniżej.

 

 

Klasa pozwala na zapisywanie błądów do plików .log i wysłaniu ich na wskazany e-mail,

Wybór zależy tylko od nas, można użyć obu na raz i zapis do pliku i wysłać e-mail.

W klasie należy podać ścieżkę do plików i przypisać e-mail gdzie nastąpi wysłanie nszych logów z błędami.

 

 

Sami ustalamy co chcemy tam umieścić, a klasa dopisuje dane

takie jak ip, host, serwer i jeszcze parę innych sami zobaczcie .

 

error-logi.class.php

 


#The MIT License
###############################
#Copyright (c) 2014 Adam Berger
###############################
#Permission is hereby granted, free of charge, to any person obtaining a copy
#of this software and associated documentation files (the "Software"), to deal
#in the Software without restriction, including without limitation the rights
#to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
#copies of the Software, and to permit persons to whom the Software is
#furnished to do so, subject to the following conditions:
###############################
#The above copyright notice and this permission notice shall be included in
#all copies or substantial portions of the Software.
###############################
#THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
#IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
#FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
#AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
#LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
#OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
#THE SOFTWARE.
##############################
 
/**
 * PHP 5.1
 */
  
/**
 * @version 1.00
 * error_logi
 * @author Adam Berger <ber34#o2.pl---->
 * Class allows you to save the log file error and send them to the e-mail,
 * The choice depends only on us, you can use both at once and save to a file and send an e-mail.
 * The class must specify the path to the file and assign e-mail address where you will send
 * Our logs with errors
 * Themselves we determine what we want to put there, and the class appends data
 * Such as ip, host, server, and a few others see for yourself.
 *
 * Klasa pozwala na zapisywanie błądów do plików .log i wysłaniu ich na wskazany e-mail, 
 * Wybór zależy tylko od nas, można użyć obu na raz i zapis do pliku i wysłać e-mail.
 * W klasie należy podać ścieżkę do plików i przypisać e-mail gdzie nastąpi wysłanie 
 * naszych logów z błędami
 * Sami ustalamy co chcemy tam umieścić, a klasa dopisuje dane 
 * takie jak ip, host, serwer i jeszcze parę innych sami zobaczcie .
   
 */
 
class error_logi {
 
      const USER_DIR   = "user_errors.log";
      const GLOBAL_DIR = 'global_errors.log'; 
      const EMAIL      = 'ber34#o2.pl'; 
 
     private $logi;
     private $ip;
     private $serwer;
     private $data;
      
    public function __construct($SERVER) {
        if(!empty($SERVER)){
            $this->serwer[] = $SERVER;
          while(list($kkk, $jjj)=each($this->serwer[0])){
            if(array_key_exists($kkk, $this->serwer[0])){
               $this->serwer[$kkk]=$jjj;
        }else{
              $this->serwer = false;
            }
          }
        }
        $this->data = date('d-m-Y h:i:s');
    }
     
    private function global_ip(){
 if(filter_var($this->serwer['REMOTE_ADDR'], FILTER_VALIDATE_IP, FILTER_FLAG_NO_PRIV_RANGE ) !== false){
       return  $this->ip = "Prywatny zakres ".$this->serwer['REMOTE_ADDR'];
     }else if(filter_var($this->serwer['REMOTE_ADDR'], FILTER_VALIDATE_IP, FILTER_FLAG_IPV4) !== false){
        return  $this->ip = "IPV4 ".$this->serwer['REMOTE_ADDR'];
        }else if(filter_var($this->serwer['REMOTE_ADDR'], FILTER_VALIDATE_IP, FILTER_FLAG_IPV6) !== false){
        return  $this->ip = "IPV6 ".$this->serwer['REMOTE_ADDR'];
     }
 }
    private function global_host(){
      if(!empty($this->serwer['REMOTE_ADDR'])){
         return gethostbyaddr($this->serwer['REMOTE_ADDR']);
      }
    }
     
     private function global_ip_server(){
      if(!empty($this->serwer['SERVER_ADDR'])){
         return $this->serwer['SERVER_ADDR'];
      }
    }
     
     private function global_agent(){
      if(!empty($this->serwer['HTTP_USER_AGENT'])){
         return $this->serwer['HTTP_USER_AGENT'];
      }
    }
     
     private function global_port(){
      if(!empty($this->serwer['REMOTE_PORT'])){
         return $this->serwer['REMOTE_PORT'];
      }
    }
     
    private function global_server_name(){
      if(!empty($this->serwer['SERVER_NAME'])){
         return $this->serwer['SERVER_NAME'];
      }
    }
      ### zapisujemy logi na serwerze w podanej ścieżce ###
  public function user_logi_save($mesage,$user){
         
    $this->logi = "|  Data:  ".$this->data."  |  User:  ".$user." | Wiadomosc: ".$mesage." | IP: ".$this->global_ip()."| Global Port: ".$this->global_port()." | Host: ".$this->global_host()."| Agent: ".$this->global_agent()."| IP Server: ".$this->global_ip_server()." \n";
    error_log($this->logi, 3, self::USER_DIR); 
 } 
   ### wysyłamy logi na e-mail z loginem usera ###
  public function user_logi_email($mesage, $user, $html=false){
     
     $this->logi = "
|  Logi z:  ".$this->global_server_name()."
|  User:  ".$user."
|  Data:  ".$this->data."
| Wiadomosc: ".$mesage."
| IP: ".$this->global_ip()."
| Global Port: ".$this->global_port()."
| Host: ".$this->global_host()."
| Agent: ".$this->global_agent()."
| IP Server: ".$this->global_ip_server()."";
    ### wiadomość html ###
    if($html === true){
     $html='';
     $html.='

Logi z '.$this->global_server_name().'

$html.='

Data: '.$this->data.'

$html.='

User: '.$user.'

$html.='

IP: '.$this->global_ip().'

$html.='

Global Port: '.$this->global_port().'

$html.='

Host: '.$this->global_host().'

$html.='

Agent: '.$this->global_agent().'

$html.='

IP Server: '.$this->global_ip_server().'

$html.='

Wiadomosc: '.$mesage.'

### Wysyłamy w imieniu ber34#o2.pl z adresu ber34#o2.pl error_log($html, 1, self::EMAIL,"subject :lunch\nContent-Type: text/html; charset=UTF-8; Foo\nFrom:".self::EMAIL."\n"); }else{ error_log($this->logi, 1, self::EMAIL,"subject :lunch\nContent-Type: text/html;charset=UTF-8; Foo\nFrom:".self::EMAIL."\n"); } } ### zapisujemy logi na serwerze w podanej ścieżce ### public function global_logi_save($mesage){ $this->logi = "| Data: ".$this->data." | Wiadomosc: ".$mesage." | IP: ".$this->global_ip()."| Global Port: ".$this->global_port()." | Host: ".$this->global_host()."| Agent: ".$this->global_agent()."| IP Server: ".$this->global_ip_server()." \n"; error_log($this->logi, 3, self::GLOBAL_DIR); } ### wysyłamy logi na e-mail ### public function global_logi_email($mesage, $html=false){ $this->logi = " | Logi z: ".$this->global_server_name()." | Data: ".$this->data." | Wiadomosc: ".$mesage." | IP: ".$this->global_ip()." | Global Port: ".$this->global_port()." | Host: ".$this->global_host()." | Agent: ".$this->global_agent()." | IP Server: ".$this->global_ip_server()." "; if($html === true){ $html=''; $html.='

Logi z '.$this->global_server_name().'

$html.='

Data: '.$this->data.'

$html.='

IP: '.$this->global_ip().'

$html.='

Global Port: '.$this->global_port().'

$html.='

Host: '.$this->global_host().'

$html.='

Agent: '.$this->global_agent().'

$html.='

IP Server: '.$this->global_ip_server().'

$html.='

Wiadomosc: '.$mesage.'

### Wysyłamy w imieniu ber34#o2.pl z adresu ber34#o2.pl error_log($html, 1, self::EMAIL,"subject :lunch\nContent-Type: text/html; charset=UTF-8; Foo\nFrom: ".self::EMAIL."\n"); }else{ error_log($this->logi, 1, self::EMAIL,"subject :lunch\nContent-Type: text/html;charset=UTF-8; Foo\nFrom: ".self::EMAIL."\n"); } } }

test-logi.php

 


include("error-logi.class.php");
 
  $logi = new error_logi($_SERVER);
   
  $mesage='Błąd log przypisujemy np. błąd pdo lub mysql albo błąd logowania';
     $user='Adam ';
     $html=true;
   
  ## ustawiamy kiedy zapisujey logi urzytkownika ##
     $logi--->user_logi_save($mesage,$user);
     $logi->user_logi_email($mesage, $user, $html);
 
  ## ustawiamy kiedy zapisujey logi globalne ##
      $logi->global_logi_save($mesage);
      $logi->global_logi_email($mesage, $html);

 

 

{jcomments on}

Używamy cookies i podobnych technologii m.in. w celach: świadczenia usług, reklamy, statystyk. Korzystanie z witryny bez zmiany ustawień Twojej przeglądarki oznacza, że będą one umieszczane w Twoim urządzeniu końcowym. Pamiętaj, że zawsze możesz zmienić te ustawienia. To find out more about the cookies we use and how to delete them, see our privacy policy.

I accept cookies from this site.

EU Cookie Directive Module Information