Archiwum kategorii ‘Sekrety Webmasterów’

Programowanie obiektowe w PHP – lekcje 4 i 5.

poniedziałek, 15 Listopad 2010

Poniżej prezentuję kolejne fragmenty szkolenia Programowanie obiektowe w PHP. Jutro następna część, a za kilka dni pełne szkolenie znajdzie się w ofercie Serwan.pl.

Słowniczek

pole klasy / właściwość klasy
zmienna dowolnego typu zawarta w klasie. Polem klasy może być również tablica lub obiekt.
metoda
funkcja zawarta w klasie
konstruktor
Metoda klasy uruchamiana automatycznie podczas tworzenia obiektu danej klasy. Do konstruktora można przekazywać argumenty. Ten temat poruszam w lekcjach 6-8.
destruktor
Metoda klasy uruchamiana automatycznie podczas usuwania obiektu danej klasy. Do destruktora nie przekazuje się argumentów. Destruktor omawiany jest w lekcji 9.

Dla większej wygody można powiększyć nagranie klikając ikonkę w prawym dolnym rogu filmu. Klip wymaga wtyczki Adobe Flash Player.

Ostatnia instrukcja powyższego przykładu jest trochę dziwna. Do metody „metoda1″ obiektu „obiekt” jest przekazywane pole tego samego obiektu, chociaż byłoby ono dostępne wewnątrz klasy poprzez referencję $this. Przekazanie tej wartości jawnie na liście argumentów jest spowodowane tym, by można było do tej metody przekazywać również inne wartości np. pola innych obiektów, wyniki działania dowolnej funkcji zwracającej liczbę, lub jawnie konkretną wartość. Ten ostatni przypadek realizowany jest w przykładzie poniżej.

Oczywiście wszelkie komentarze są mile widziane.



Programowanie obiektowe w PHP – lekcja 3.

niedziela, 14 Listopad 2010

Poniżej prezentuję trzeci fragment szkolenia Programowanie obiektowe w PHP. Jutro kolejna część, a w przyszłym tygodniu pełne szkolenie znajdzie się w ofercie Serwan.pl.

Słowniczek

abstrakcja
klasa może być modelem abstrakcyjnym dla innych klas dziedziczących po niej. Pojęcie to jest blisko związane z dziedziczeniem w szczególności po klasach abstrakcyjnych. Klasy i metody abstrakcyjne omawiam w lekcjach 35-39. Czasami abstrakcją nazywane jest też odwzorowanie rzeczywistych modeli w strukturze klasy (abstrakcja danych i procesów). Klasa samochód byłaby abstrakcją rzeczywistego samochodu, zawarta w klasie właściwość silnik byłaby abstrakcją części samochodu, a metoda jedź – abstrakcją funkcji samochodu.
przesłanianie pól i metod
Jest to redefiniowanie / nadpisywanie pól i metod klasy bazowej w klasie pochodnej. Ten temat poruszam w lekcjach 11 i 12.
metody wirtualne
W PHP każda metoda, która została przesłonięta w klasie pochodnej staje się metodą wirtualną. W innych językach wymagałoby to zastosowania specjalnej techniki (np. poprzedzenie definicji metody słowem virtual) w PHP mamy to z automatu. Ten temat poruszam w lekcji 11.
polimorfizm (wielopostaciowość)
mechanizm który pozawala wywołanie metod o takiej samej nazwie zawartych w różnych obiektach w zależności od kontekstu wywołania metody. Przykład polimorficznego wywołania metody zawiera lekcja 11.

Dla większej wygody można powiększyć nagranie klikając ikonkę w prawym dolnym rogu filmu. Klip wymaga wtyczki Adobe Flash Player.

Oczywiście wszelkie komentarze są mile widziane.



Programowanie obiektowe w PHP – lekcja 2.

sobota, 13 Listopad 2010

Poniżej prezentuję drugi fragment szkolenia Programowanie obiektowe w PHP. Jutro kolejna część, a w przyszłym tygodniu pełne szkolenie znajdzie się w ofercie Serwan.pl.

W komentarzach pod wczorajszą lekcją pojawiły się pojęcia:

  • izolacja kodu
  • dziedziczenie
  • klonowanie

Te i wiele innych pojęć omawiam w kolejnych lekcjach choć nie zawsze muszą być tak nazwane. Dla większej przejrzystości i wygody będę umieszczał po kilka definicji przy każdej lekcji.

hermetyzacja/enkapsulacja (izolacja kodu, kapsułkowanie, ukrywanie informacji)
zamknięcie i ukrycie przed kodem zewnętrznym kodu i pól wewnątrz klas. Klasy udostępniają jedynie swój interfejs, za pośrednictwem którego możliwe jest wykorzystanie kodu zawartego w metodach klas i użycie pól tych klas. Technicznie służą temu omawiane w lekcji poniżej kwalifikatory dostępu. Hermetyzacja uodparnia program na błędne użycie obiektów oraz umożliwia podział procesów na prostsze czynności.
dziedziczenie
mechanizm który pozawala na tworzenie hierarchii klas od najbardziej ogólnych do szczegółowych. Wspólna funkcjonalność jest zawarta w klasach ogólnych. Klasy dziedziczące są wzbogacane o indywidualne pola i metody. Dzięki temu mechanizmowi zachodzi specjalizacja klas potomnych. Więcej na ten temat wyjaśniam w lekcji 10.
klonowanie
Ponieważ obiekty nie mogą być kopiowane w ten sam sposób co inne typy danych, stworzono mechanizm klonowania do tworzenia niezależnych kopii obiektu. Ten temat poruszam w lekcji 22.

Dla większej wygody można powiększyć nagranie klikając ikonkę w prawym dolnym rogu filmu. Klip wymaga wtyczki Adobe Flash Player.

Oczywiście wszelkie komentarze są mile widziane.



Programowanie obiektowe w PHP – lekcja 1.

piątek, 12 Listopad 2010

Poniżej prezentuję fragment szkolenia Programowanie obiektowe w PHP. Jutro kolejna część, a w przyszłym tygodniu pełne szkolenie znajdzie się w ofercie Serwan.pl.

Dla większej wygody można powiększyć nagranie klikając ikonkę w prawym dolnym rogu filmu. Klip wymaga wtyczki Adobe Flash Player.

Oczywiście wszelkie komentarze są mile widziane.



Programowanie obiektowe w PHP

środa, 10 Listopad 2010

Dzięki programowaniu obiektowemu możemy tworzyć rozbudowane programy w uporządkowany sposób. Umożliwia nam to podział programu na odrębne części – klasy. W klasie wyodrębniamy fragmenty programów, które są jakąś logiczną całością, odpowiadającą za jedną funkcjonalność, albo jeden spójny zbiór danych.

Ta logiczna całość może być wykorzystana wiele razy w jednym programie, jak również w innych programach. W miejscu, gdzie chcemy użyć daną klasę, tworzymy obiekt tej klasy. Obiektów może być kilka. Stosujemy je wszędzie tam, gdzie potrzebna jest nam dana funkcjonalność, jeżeli tę funkcjonalność musimy zmienić, robimy to w jednym miejscu – w definicji klasy. Skutki tej zmiany będą widoczne wszędzie tam, gdzie występują obiekty tej klasy.

Podobna sytuacja występuje w przypadku, gdy w programie wystąpi jakiś błąd. Ten sam błąd może wystąpić w wielu miejscach, ale dzięki temu, że program jest oparty na klasach i obiektach tych klas, to przyczyna błędu występuje tylko w jednym miejscu w kodzie całego programu – w definicji klasy. Gdy usuniemy błąd, usterka znika z każdego miejsca, w którym wystąpiła.

I coś, co dla wielu będzie prawdopodobnie najważniejszą zaletą. Umiejętność programowania obiektowego umożliwia używanie frameworków i stosowanie wzorców projektowych, co szalenie ułatwia i przyspiesza proces powstawania programów.

Teraz jak to wygląda w praktyce. Utworzę klasę Notatka

class Notatka
{
	private $autor;
	private $notatka;
 
	public function zapisz_autora($autor)
	{
		$this->autor=$autor;
	}
 
	public function zapisz_notatke($notatka)
	{
		$this->notatka=$notatka;
	}
 
	public function wyswietl()
	{
		echo '<h2>'.$this->autor.'</h2>';
		echo '<p>'.$this->notatka.'</p>';
	}
}
 
$obiekt =new Notatka();
$obiekt->zapisz_autora($_POST['autor']);	
$obiekt->zapisz_notatke($_POST['notatka']);	
$obiekt->wyswietl();

Klasa

Klasa jest prototypem obiektu – strukturą zawierającą zarówno dane (pola klasy) jak i funkcje (metody klasy).
Klasę definiuje się słowem kluczowym class po którym podajemy nazwę klasy, a następnie wewnątrz nawiasów klamrowych definiujemy jej pola i metody.

Obiekt

Obiekt jest instancją klasy zawierającą się w konkretnej zmiennej wykorzystywanej w kodzie programu.
Obiekt danej klasy tworzy się podstawiając do zmiennej instancję klasy tworzoną operatorem new. Dostęp do pól i metod klasy następuje poprzez nazwę zmiennej, operator ->, a następnie nazwę pola lub metody. Dostęp do pól i metod wewnątrz klasy otrzymuje się poprzez referencję $this->

Kwalifikatory dostępu

Definiując wewnątrz klasy pola i metody używamy kwalifikatorów dostępu. Do dyspozycji mamy trzy kwalifikatory dostępu: public, private, protected. Składowe o dostępie public są dostępne zarówno wewnątrz klasy jak i na zewnątrz. Do składowych o dostępie private dostęp istnieje jedynie z wewnątrz klasy, w której składowa została zdefiniowana. Do składowych o dostępie protected dostęp istnieje jedynie z wewnątrz klasy, w której składowa została zdefiniowana, oraz klas potomnych.

Metody

Metody klasy są funkcjami zdefiniowanymi wewnątrz klasy. Stosują się do nich wszystkie zasady związane ze zwykłymi funkcjami z uwzględnieniem kwalifikatorów dostępu.

Pola

Pola klasy są składowymi klasy przechowującymi dane dowolnego typu. Stosują się do nich wszystkie zasady dotyczące zwykłych zmiennych z uwzględnieniem kwalifikatorów dostępu.



Zabezpieczony: Optymalizacja przetwarzania tablicy w pętli

czwartek, 28 Październik 2010

Ten wpis jest zabezpieczony hasłem. Aby go zobaczyć, proszę wprowadzić poniżej swoje hasło:



Wprowadzenie do ADODB

wtorek, 22 Czerwiec 2010

Biblioteka ADODB jest warstwą abstrakcyjną pośredniczącą w komunikacji z bazą danych. Dzięki niej aplikacja może być przenoszona między wieloma różnymi systemami baz danych. ADODB obsługuje MySQL, PostgreSQL, Oracle, Interbase, Microsoft SQL Server, Access, FoxPro, Sybase, ODBC i ADO. Ułatwione jest też wysyłanie i odbieranie danych z bazy z poziomu skryptu PHP.

Tworzenie obiektu i nawiązywanie połączenia

Połączenie z bazą za pomocą biblioteki ADODB wygląda następująco:

include("adodb5/adodb.inc.php");
$db = NewADOConnection('mysql');
$db->Connect("127.0.0.1", "root", "haslo", "mojabaza");

W pierwszej linijce włączamy do skryptu bibliotekę ADODB. Ścieżka do pliku adodb.inc.php może być nieco inna – ważne, by wskazywała na wspomniany wcześniej plik. W drugiej linijce tworzymy obiekt komunikacji z bazą danych. Funkcja NewADOConnection() w argumencie przyjmuje symbol bazy danych. Ostatnia linijka łączy obiekt $db z rzeczywistą bazą danych. Metoda Connect pobiera kolejno argumenty: adres bazy danych, nazwa użytkownik, hasło i nazwa bazy danych.

Pobieranie i aktualizacja danych – metoda Execute()

$rs = $db->Execute('SELECT * FROM uzytkownik');
$rs = $db->Execute("UPDATE uzytkownik SET imie=$imie WHERE id=45;");

W metodzie Execute możemy umieścić dowolne zapytanie SQL. Jeżeli będzie to zapytanie pobierające dane, dane będą dostępne w zmiennej $rs

Pobieranie danych i wyświetlanie danych z bazy – metody: GetRow(), GetAll(), GetOne()

Istnieje znacznie wygodniejszy sposób pobierania danych z bazy niż metoda Execute(). Są to metody: GetRow(), GetAll() i GetOne(). W tych metodach umieszczamy tylko zapytania SELECT.

$rs = $db->GetAll('SELECT * FROM user WHERE id<40');
$rs = $db->GetRow('SELECT * FROM user WHERE id=1');
$rs = $db->GetOne('SELECT login FROM user WHERE id=1');

Metoda GetAll() zwraca wiele rekordów – wszystkie będące wynikiem zapytania. Wynik zapisywany jest w tablicy dwuwymiarowej $rs. Elementami tablicy głównej są tablice z polami jednego rekordu pobranego z bazy danych.
Metoda GetRow() zwraca jeden rekord w postaci tablicy jednowymiarowej. Jeżeli zapytanie zwróci więcej danych, zapisany zostanie jedynie pierwszy rekord.
Metoda GetOne() zwraca pojedynczą wartość. Jeżeli zapytanie zwróci więcej danych, zwrócona zostanie jedynie wartość pierwszej kolumny z pierwszego rekordu wyniku zapytania.

Biblioteka ADODB jest dużym ułatwieniem dla każdego programisty. 3 z 6 stron tworzonych na szkoleniu Zawodowy Webmaster wykorzystują ją do wszelkich operacji na bazie danych. Oprócz opisanych powyżej możliwości na szkoleniu wykorzystywane są również złączenia, podzapytania i funkcje agregujące.



Kontakt z pracodawcą/klientem

niedziela, 16 Maj 2010

Zleceniodawcy oceniają przede wszystkim wygląd stron w naszym portfo­lio. Więc jeśli nie mamy sami zdolności plastycznych, to warto nawiązać współ­pracę z jakimś grafikiem, a nawet kilkoma. Bywają graficy, którzy robią świetne layouty, ale wszystkie w tym samym stylu. Stawki za layout są bardzo zróżnico­wane i przeważnie podlegają dużym negocjacjom. Należy jednak uważać bo ich wysokość nie zawsze odzwierciedla poziom wykonanej pracy. Decydując się na droższego grafika, nie zawsze otrzymamy lepszy efekt końcowy.

Jeżeli współpracujemy z grafikiem tylko on-line, możemy napotkać prze­szkody komunikacyjne. W czasie spotkania w cztery oczy dużo łatwiej można wytłumaczyć, o co nam chodzi, co i jak chcemy zaprezentować. Zapisując to wszystko w e-mailu możemy nie zostać dobrze zrozumiani. Bardzo ważne jest w takiej sytuacji umieszczenie szczegółowych wskazówek, a nawet szkiców i skrupulatne pilnowanie poprawek. Jeżeli dostajemy projekt, a w nim brakuje jakichś elementów, o których pisaliśmy, należy jak najszybciej zasygnalizować uchybienie i dopilnować, by zostało ono poprawione.

Warto poświęcić nieco więcej czasu i na początku wysłać jak najbardziej przemyślane wskazówki, skrupulatnie opisać wszelkie szczegóły. Jeżeli nie za­dbamy o to od początku, to później może się to na nas zemścić.



Jak wykorzystać selektory cz. 3.

piątek, 14 Maj 2010

Oto ostatnia część opisu selektorów CSS. W tym artykule opiszę selektory odnoszące się do elementów strony, z którymi nastąpiła jakaś interakcja, lub są ich modyfikatorami. Selektory te nazywane są pseudoklasami. Łatwo można je rozpoznać po znaku „:” w selektorze.

Definicja styli nadal znajduje się w pliku „style.css”. Natomiast kod strony „index.html” powinien wyglądać tak:

<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="pl">
<head>
	<meta http-equiv="content-type" content="text/html; charset=utf-8" />
	<title>Lorem ipsum</title>
	<link rel="stylesheet" href="style.css" />
</head>
<body>
<p>
Ten akapit jest pierwszym akapitem na tej stronie. Nie jest specjalnie długi, ale za to bez sensu. Jeżeli go nie zrozumiałeś, nie przejmuj się. 7 na 10 naukowców też go nie rozumie. Ostatnie badania dowodzą, że ten akapit nie istnieje.
</p>
<div>
	<p>
	Lorem ipsum dolor sit amet enim. Etiam ullamcorper. <a href="#1">test 1</a> Suspendisse a pellentesque dui, non felis. <a href="#2">test 2</a> <a href="#3">test 3</a> Maecenas malesuada elit lectus felis, <a href="#4">test 4</a> malesuada ultricies. Curabitur et ligula. Ut molestie a, ultricies porta urna.</p>
</div>
<p>Vestibulum commodo volutpat a, convallis ac, laoreet enim. Phasellus fermentum in, dolor. Pellentesque facilisis.</p>
</body>
</html>

Jeżeli chcemy wyróżnić pierwszą linię jakiegoś tekstu, lub pierwszą linię każdego akapitu, możemy zastosować :first-line. W przykładzie poniżej pierwsza linia każdego akapitu zostanie wyświetlona przy pomocy kapitalików.

p:first-line {font-variant: small-caps;}

Można też wyróżnić pierwszą literę powiększając ją…

p:first-letter {font-size: 200%;}

albo pierwsze wystąpienie danego elementu w innym elemenci. W tym przypadku będzie to zmiana koloru pierwszego akapitu. Styl zostanie powtórzony dla kolejnego akapitu, gdyż jest on pierwszym w bloku div.

p:first-child {color: #cc0000;}

Przy pomocy styli można wstawiać dowolną zawartość przed lub po dowolnym elemencie. Np. błękitną gwiazdkę przed każdym odnośnikiem i dodatkowy tekst za blokiem div. Te ustawienia mogą nie działać w starszych przeglądarkach i w IE 8 w widoku zgodności

a:before {content: "*"; color: #00ccff;}
div:after {content: "Tu kończy się blok div"}

Oddzielną grupą pseudoklas są te związane z odnośnikami. Wygląd odnośników można modyfikować w zależności od tego, czy są wskazywane aktualnie kursorem (:hover), zostały już wcześniej odwiedzone (:visited), właśnie zostały kliknięte (:active), lub zostały wybrane klawiszem tabulacji (:focus). Za pomocą pseudoklasy :focus można też wyróżnić pola formularzy, które są aktualnie edytowane. Pseudoklasa :focus może pokrywać się z pseudoklasą :active. Zwykły stan odnośników definiuje się poprzez pseudoklasę :link.

a:link {color: #00cc00; text-decoration: none;}
a:visited {color: #006600; text-decoration: none;}
a:hover {color: #66ff66; text-decoration: underline;}
a:active {color: #ff0000; text-decoration: none;}
a:focus {color: #ff00ff; text-decoration: none;}

Przykładowa strona po zastosowaniu tego selektora wygląda tak:

Ten akapit jest pierwszym akapitem na tej stronie. Nie jest specjalnie długi, ale za to bez sensu. Jeżeli go nie zrozumiałeś, nie przejmuj się. 7 na 10 naukowców też go nie rozumie. Ostatnie badania dowodzą, że ten akapit nie istnieje.

Lorem ipsum dolor sit amet enim. Etiam ullamcorper. test 1 Suspendisse a pellentesque dui, non felis. test 2 test 3 Maecenas malesuada elit lectus felis, test 4 malesuada ultricies. Curabitur et ligula. Ut molestie a, ultricies porta urna.

Vestibulum commodo volutpat a, convallis ac, laoreet enim. Phasellus fermentum in, dolor. Pellentesque facilisis.



Skąd brać klientów

poniedziałek, 10 Maj 2010

Załóżmy, że mamy już imponujące i wystarczająco zróżnicowane portfo­lio. Umieszczamy je w Internecie i co dalej. Można oczywiście takie portfolio promować, reklamować, pozycjonować w Google, ale jest to dosyć kosztowne i/lub czasochłonne. Pozycjonowanie jak najbardziej kiedyś może się przydać, warto więc, by strona z portfolio była zoptymalizowana pod wyszukiwarki i wpisana do katalogów. Te działania z pewnością zaprocentują w przyszłości.

Na początku nie ma co liczyć, że klienci będą przychodzić do nas sami. To my musimy szukać zleceń. Zresztą po kilku nawet latach nie warto zupełnie rezygnować z poszukiwania zleceń. Nawet gdy przez jakiś czas firmy będą się zabijać przed naszymi drzwiami, to będą też gorsze okresy kiedy umiejętność wyszukiwania zleceń może się okazać dość cenna.

Gdzie zatem należy szukać tych zleceń? W Internecie i w prasie z ogło­szeniami drobnymi. Jeżeli chodzi o prasę, to każdy powinien sam zorientować się w jakich tytułach w jego regionie można znaleźć coś interesującego. W In­ternecie również można znaleźć wiele serwisów z ogłoszeniami. Będą wśród nich zarówno serwisy regionalne jak i ogólnopolskie. Z tych bardziej znanych mogę polecić zlecenia.przez.net, www.praca-online.pl, oferia.pl, ogloszenia­.ngo.pl i gumtree.pl.