Szukaj na tym blogu

Postaram się przekazać swoje doświadczenia z PHP, oraz innych dziwnych rzeczach, typu MySQL, DB2. Czyli to co umiem. Blogoczytelników o słabych nerwach proszę o nieczytanie tego blogu. Dlaczego? Jeszcze nie wiem. W razie pytań z dziedziny PHP proszę pytać, jest cień możliwości że akurat to wiem. ;)

wtorek, 22 marca 2011

Jak można skomplikować skrypt

Jak można skomplikować se skrypt

W sumie to banalna sprawa, wystarczy przejrzeć niektóre przykłady, ale ja to zrobię w sposób kreatywny. Czyli jak działa coś oczywistego dla doświadczonych. Więc zaczynajmy.
Mamy prosty przykład:

<?php
echo 'Ala ma psa!';
?>


Banalne, ale gdyby ten ciąg znakowy dać jako zmienną.

<?php
$text = 'Ala ma psa!';
echo $text;
?>


W sumie można zaszaleć i zdefiniować stałą.

<?php
define ('TEKST', 'Ala ma psa!');
echo TEXT;
?>


W sumie fajne, ale gdyby pokusić się o... funkcje? Czemu nie, tylko czemu nie dowalić z grubej rury i nie zrobić całej klasy? A co tam, procesory są coraz szybsze...

<?php
class tekst{
var $text = 'Ala ma psa!';
}
$tekst = new tekst;
echo $tekst->text;
?>


Ale skoro mamy już klasę to czemu nie zrobić żeby można było zmieniać ową Alę na kogo innego. Ola będzie dyskryminowana. Zmieńmy to.

<?php
class tekst{
var $text = 'Ala ma psa!';
function zmiana($imie) {
$this->text = "{$imie} ma psa!";
}
}
$tekst = new tekst;
$tekst->zmiana('Ola');
echo $tekst->text;
?>


Ktoś zapyta na grzyba to jakieś $this. Niby proste pytanie. Chodzi o zmienne klasy, a nie funkcji. Jakbyśmy użyli $text, była by to zmienna wewnątrz funkcji, jak tak operujemy zmienną klasy. Nie zmienia to faktu że nadal mam niedosyt. Przecież Ola ma kota? Zróbmy to więc tak.

<?php
class tekst{
var $zwierz = 'psa';
var $imie = 'Ala';
var $text = "Ala ma psa!";
function zmiana_imie($imie) {
$this->imie = $imie;
$this->text = "{$imie} ma {$this->zwierz}!";
}
function zmiana_zwierz($zwierz) {
$this->zwierz = $zwierz;
$this->text = "{$this->imie} ma {$zwierz}!";
}
}
$tekst = new tekst;
$tekst->zmiana_imie('Ola');
$tekst->zmiana_zwierz('kota');
echo $tekst->text;
?>


Specjalnie użyłem tych samych nazw zmiennych, żeby pokazać że są one izolowane. Nie zmienia faktu że czuje jakiś... niedosyt. Czemu to w klasie nie mogę wpisać zmiennych i żeby samo sie układało? Więc dajmy czadu.

<?php
class tekst{
var $imie = 'Ala';
var $czynnosc = 'ma';
var $zwierz = 'psa';
var $text = '';
function tekst() {
$this->text = "{$this->imie} {$this->czynnosc} {$this->zwierz}!";
}
function zmiana_imie($imie) {
$this->imie = $imie;
$this->text = "{$imie} {$this->czynnosc} {$this->zwierz}!";
}
function zmiana_czynnosc($czynnosc) {
$this->czynnosc = $czynnosc;
$this->text = "{$this->imie} {$czynnosc} {$this->zwierz}!";
}
function zmiana_zwierz($zwierz) {
$this->zwierz = $zwierz;
$this->text = "{$this->imie} {$this->czynnosc} {$zwierz}!";
}
}
$tekst = new tekst;
$tekst->zmiana_imie('Ola');
$tekst->zmiana_czynnosc('głaszcze');
$tekst->zmiana_zwierz('konia');
echo $tekst->text;
?>


Na pierwszą myśl przyszło mi nie głaszcze i nie Ola. ;)
Dodałem jeszcze jedną funkcje żeby automatycznie się uruchamiała i robiła nam piękny tekst jak nikt nie wywoła sam funkcji nie wyświetlał pustego.
Czy można bardziej zamotać? Zamotać da się, ale za to będzie mniej lini.

<?php
class tekst{
var $imie = 'Ala';
var $czynnosc = 'ma';
var $zwierz = 'psa';
var $text = '';
function tekst() {
$this->text = "{$this->imie} {$this->czynnosc} {$this->zwierz}!";
}
function zmiana($imie= NULL, $czynnosc = NULL, $zwierz = NULL) {
$this->imie = $imie==NULL ? $this->imie : $imie;
$this->czynnosc = $czynnosc==NULL ? $this->czynnosc : $czynnosc;
$this->zwierz = $zwierz==NULL ? $this->zwierz : $zwierz;
$this->tekst();
}
}
$tekst = new tekst;
$tekst->zmiana ('Ola');
echo $tekst->text;
?>


Teraz jest jedna funkcja zmieniająca wszystko. Jeżeli będzie jeden parametr, drugi i trzeci będzie NULL i wstawi się wartość domyślna. Poza tym w funkcji zmiana jest wywoływana funkcja tekst, co by jej nie pisać dwa razy. Jeżeli nie wywołamy funkcji zmiana, będzie wartość domyślna.

Ciąg dalszy nastąpi matactwa klasy, tak jej zostawić nie można.

Brak komentarzy:

Prześlij komentarz

Konstruktywne komentarze mile widziane.
Wulgaryzmy, obraźliwe stwierdzenia będą usuwane.