Witaj, Gościu O nas | Kontakt | Mapa
Wortal Forum PHPEdia.pl Planeta Kubek IRC Przetestuj się!
Wyszukiwarka

Wyszukiwarka

Aby odnaleźć interesujące Cię informacje wpisz poniżej szukane frazy:
Logowanie

Logowanie

Zaloguj się aby zobaczyć swój profil:

Projektowanie aplikacji w PHP. Część pierwsza.

Na rozwiązaniach typu "na odwal się" często tracimy więcej czasu niż w domyśle mieliśmy oszczędzić. To się odnosi zarówno do praktyk kodowania w PHP, jak i do każdego innego problemu. W pierwszym artykule tej serii, dowiesz się jak wykorzystywać w praktyce konwencje, które oszczędzą Ci czasu i męczarni, a dodatkowo uczynią twój kod lepszym.

Podczas tworzenia aplikacji w PHP, nie trudno o wspomniane rozwiązanie ";na odwal się"; -; ubogo napisane, nie nadające się do ponownego użycia. Biorąc pod uwagę, że PHP jest zwykle wykorzystywany w niedużych projektach, projektanci mogą usprawiedliwić niską jakość swojego kodu tym, że prawdopodobnie nigdy nie wrócą już do projektu i nie mają zamiaru wykorzystania ponownie napisanego kodu. Pozostaje pytanie: jeśli już coś robimy, czemu nie możemy tego zrobić dobrze?

Paradygmat w tym przypadku zawiera sporo prawdy z kilku powodów. Po pierwsze, jeśli piszesz już dobrze, na pewno znajdziesz coś do ponownego użytku w swoim kodzie. Po drugie, wymagania się zmieniają -; kod prawdopodobnie będzie wymagał modyfikacji i konserwacji. Może to Ty będziesz tego dokonywał, może ktoś inny -; oczywiście będzie to miało sens tylko w przypadku dobrze napisanego kodu -; w przeciwnym razie lepiej zacząć od nowa. Intencją tego artykułu jest przedstawienie kilku najważniejszych, prostych, niskopoziomowych zasad pisania dobrego kodu w PHP.

Pierwsza konwencja, którą omówimy, dotyczy struktury i bezpieczeństwa związanego z nazewnictwem systemu plików. Potem dowiemy się o zasadach nazywania funkcji i zmiennych, zagnieżdżaniu i kilku innych. Pod koniec omówimy jeszcze kilka konwencji dotyczących programowania w PHP, tym razem dotyczących m. in. spójności i wydajności. Na początek, chciałbym jednak dać wam do zrozumienia, że rozwiązania zawarte w tym artykule nie są jedynymi poprawnymi, aczkolwiek są sprawdzone i udowodniły nieraz krótki czas tworzenia i modyfikowania aplikacji.

Informacje na podobny temat:
Wasze opinie
Wszystkie opinie uzytkowników: (7)
Pętla
Czwartek 07 Luty 2013 2:13:59 pm - mayu11 <kontakt_at_mariuszolszowski.pl>

Ym.. z tą pętlą to może lepiej:

for( $i = count( $arr ); $i > 0; --$i )
{
foo( $i );
}

Przy nieobowiązkowej dobrej kolejności, chyba jest ok ;) I nie trzeba trzech zmiennych.

Typo
Sobota 11 Grudzień 2010 11:58:48 am - mambax7

Zamiast:

function suqare($number)

powwino byc:

function square($number)

petla for
Środa 23 Styczeń 2008 6:36:47 pm - xiann

Do dobrze, ale dlaczego:
for ($i = 0, $ii = count($myArray); $i < $ii; $i++) {
print $myArray[$i];
}

skoro mamy:

foreach ($myArray as $v) {
print $v;
}

??

Referencje
Sobota 18 Sierpień 2007 5:36:39 pm - kkasprzak

Niestety autor artykułu mija się trochę z rzeczywistością jeśli chodzi o referencje w PHP4. Używanie referencji nie zawsze prowadzi do oszczędności pamięci wręcz w pewnych przypadkach prowadzi do zwiększenia jej zużycia. Referencje jak sugeruje autor nie zostały też stworzone po to aby oszczędzać pamięć ale po to żeby można było operować na oryginalnym obiekcie a nie na jego kopii w metodach klasy czy funkcjach. Samo przekazanie instancji klasy do funkcji nie prowadzi do stworzenia jego kopii jak stwierdza autor - nadal działa mechanizm przekazywania przez wartość. Kopia obiektu jest tworzona w momencie gdy wywołamy jedną z metod klasy lub nadpiszemy wartość któregokolwiek z atrybutów klasy w tej że funkcji/metodzie. Zauważmy jednak że odczyt atrybutów klasy nie wymaga już tworzenia kopii obiektu, dlatego też php4 tego nie robi. Dlatego też możemy bezpiecznie przekazywać obiekty przez wartość dopóki wykorzystujemy obiekt jako obiekt przenoszący dane (DVO) z jednym zastrzeżeniem, że czytamy bezpośrednio z atrybutów klasy a nie poprzez gettery. Każde wywołanie jakiejkolwiek metody na rzez obiektu prowadzi do stworzenia jego kopii!!!

Referencja nie jest żadnym wskaźnikiem do wyimaginowanego miejsca w pamięci, jest to tylko inna nazwa jednego z kontenerów zmiennych. Po prostu w tablicy symboli jedna lub więcej nazw wskazuje na ten sam kontener.

Przeanalizujmy poniższy przykład:

<?php

function suma(&$v) {
return array_sum($v);
}

$a = range(1, 1000000);
$b = $a;

$c = suma($a);

?>

Wierzcie lub nie ale ,,dzięki'' temu, że tablica do funkcji jest przekazywana przez referencję zmusiliśmy php do stworzenia dodatkowej kopii tablicy $a i stało się to dokładnie w momencie wywołania funkcji suma(). Dlaczego....? Dlatego, że php próbuje być sprytne i nie tworzy kopii zmiennej dopóki nie musi. W naszym przypadku gdy przypiszemy $b = $a nie jest tworzona kopia tablicy oba symbole wskazują na ten sam kontener zmiennej. Jednak gdy do gry wchodzi referencja php musi stworzyć dodatkową kopię ponieważ w przypadku gdy dokonalibyśmy modyfikacji zmiennej przekazanej przez referencję zmiany widoczne by były zarówno w zmiennej $a i $b.

Zainteresowanych szczegółami mechanizmu referencji i zmiennych w php4 odsyłam do jednego z numerów phparchitect lub lepiej kodu php.

Pozdrawiam
Karol Kasprzak

Ciekawe informacja z petla for
Niedziela 04 Luty 2007 12:56:04 am - andrews_p <andrews_p_at_o2.pl>

Zaciekawiła mnie informacja na temat pętli for i obliczania długości tablicy w pierwszej części fora.

for(i=0, dlugosc=count(array); i<dlugosc; i++)
{
//kod
}

Ciekawe rozwiązanie co faktycznie zmniejsza ilość obliczeń. Chodź nie istotne przy małym projekcie ale gdy na stronie jest kilkadziesiąt osób może dać duże rezultaty.

Mały błędzik
Piątek 22 Wrzesień 2006 1:54:25 pm - arqon <lilika_at_wp.pl>

W poddziale standarty kodowania , w trzecim listingu powinno być print $myNumberSquared; aby wyświetlał rezultat metody :)
Super artykuł...

Klamry zbyt rozwlekłe
Piątek 14 Kwiecień 2006 4:42:54 pm - akubiczek

Wszystko fajnie, chociaż klamry w osobnych liniach wydają mi się zbyt rozwlekłym rozwiązaniem, już lepiej trzymać się tego co proponuje pear, czyli klamra otwierająca w tej samej lini:

function foo() {
//do some
}

Nie nie traci się na czytelności, a wprost przeciwinie - może być bardziej czytelnie, bo więcej kodu da sie objąć wzrokiem.

Mentax.pl    NQ.pl- serwery z dodatkiem świętego spokoju...   
O nas | Kontakt | Mapa serwisu
Copyright (c) 2003-2024 php.pl    Wszystkie prawa zastrzeżone    Powered by eZ publish Content Management System eZ publish Content Management System