Niezalogowany [ logowanie ]
Subskrybuj kanał ATOM Kanał ATOM    Subskrybuj kanał ATOM dla tagu php Kanał ATOM (tag: php)

Autor wpisu: Zyx, dodany: 23.05.2010 17:35, tagi: php

Dziś zakończył się PHPCon 2010 Poland - pierwsza polska konferencja poświęcona językowi PHP organizowana przez Polską Grupę Użytkowników Linuksa. Planeta php.pl prawdopodobnie niebawem zapełni się pewnie jeszcze sporą ilością relacji, ale nic dziwnego. Do tej pory zloty PHP praktycznie nie istniały; wszyscy jechali tam, zadając sobie pytanie, jak to wypadnie. Czy wypadło dobrze? Zapraszam do krótkiej minirelacji.

Autor wpisu: sokzzuka, dodany: 23.05.2010 00:26, tagi: javascript, php

Pewnego razu gdy medytowałem nad sensem świata, pewna ciekawa rzecz zaprzątnęła moim umysłem. Pytanie co było pierwsze – funkcja czy klasa ? Pytanie, co jest bardziej pierwotnym pojęciem w programowaniu?

Nie ma to może żadnych poważniejszych implikacji dla nas koderów, jednak można dojść do całkiem ciekawych wniosków. Odpowiedzią na pytanie zadane w tytule jest: pierwszy był… void ;) .

A tak już całkiem na serio. W matematyce, w algebrze zbiorów najszerszym pojęciem jest klasa, jest ona bytem szerszym od zbioru. Klasa agreguje różne zbiory.

W programowaniu, klasa ma podobne znaczenie, jest czymś co określa pewien rodzaj obiektów. I tu właśnie zaczynają się schody, bo jak wiemy w klasie są metody, czyli funkcje. Więc jak to jest ? Czy może istnieć klasa która składa się z funkcji ? A może, istnieje sobie np. klasa funkcji kwadratowych, czyli wszystkich funkcji w postaci Ax2+bx+c czy klasa funkcji ekspotencjalnych. Co ciekawe np. w języku php da się stworzyć takie klasy:

class SquareFunction {
 
    protected $_a = 1;
 
    protected $_b = 1;
 
    protected $_c = 1;
 
    public function __construct($a,$b,$c){
 
        $this->_a = $a;
 
        $this->_b = $b;
 
        $this->_c = $c;
 
    }
 
    public function __invoke($x){
 
        return $this->_a*pow($x,2) + $this->_b*$x + $this->_c;
 
    }
 
}
 
$func = new SquareFunction(5,6,4);
 
echo $func(10);

Oczywiście jest tu trochę php-owej magii związanej z funkcją __invoke(dostępna od 5.3), dzięki której można wywoływać klasę jako funkcję. Nie mniej jednak logicznie rzecz biorąc jest to podejście słuszne.

Wracając jednak do pytania podstawowego co było pierwsze. Doszedłem do wniosku przemyśliwując sprawę gruntownie, że oba pojęcia są pojęciami pierwotnymi. Nie da się zdefiniować klasy bez funkcji i funkcji bez klasy. Tak jak nie da się podzielić elektronu na pół, ponieważ jest cząstką punktową, a jak wiemy matematyczny punkt jest niepodzielny.

Przypomina mi cała sprawa rzecz wziętą z fizyki, mianowicie dualizm korpuskularno falowy, funkcja jest jednocześnie funkcją i klasą.Z istniejących języków programowania najlepiej oddaje ten dualizm Javascript, gdzie funkcja jednocześnie jest klasą i powiem szczerze, że po tych przemyśleniach okazuje się, że jednak JS ma jakiś głębszy sens ;)

Autor wpisu: sokzzuka, dodany: 21.05.2010 08:43, tagi: php

Dziś stała się rzecz, na którą dużo osób czekało. Do trunk-a PHP został commitowany patch umożliwiający typowanie argumentów dla nie obiektów w funkcjach.

Od teraz możliwe jest to:

function foo(int $bar){
    return $bar + 5;
}

Z tego co pamiętam, typować argumenty można silnie i słabo, tzn: jeżeli w liście argumentów podamy int to wtedy funkcja zaakceptuje tylko argument o typie int. Jeżeli jednak zdeklarujemy to jako (int) to wtedy wszystko co się da rzutować na int-a przejdzie.

Feature zapewne znajdzie się w wersji 5.4 interpretera.

Autor wpisu: batman, dodany: 21.05.2010 08:25, tagi: php

Piekło zamarzło! Wczoraj na blogu Ilia Alshanetsky pojawił się wpis zatytułowany Scalar Type Hints are Here!. Wynika z niego, że do SVN-a dodana została długo oczekiwana funkcjonalność dająca możliwość określenia typu argumentu przekazywanego do funkcji. Oprócz array oraz nazwy klasy, można stosować typy proste jak int, czy string. W praktyce będzie to wyglądać następująco:

function(int $i)
{
    // jakieś operacje na zmiennej $i
}

Niestety muszę ostudzić wasz entuzjazm. Modyfikacja ta nie jest jeszcze wprowadzona do oficjalnego wydania języka. Poza tym zanim trafi ona pod nasze strzechy, trochę czasu minie. Nie pamiętam, bym widział hosting z najnowszą wersją PHP.

Z podobnych funkcjonalności brakuje mi jeszcze możliwości określenia typu zwracanego przez funkcję. Może niedługo się pojawi?

Autor wpisu: batman, dodany: 20.05.2010 12:00, tagi: php

Mam dzisiaj dla was niespodziankę – darmową książkę pod tytułem “PHP5. Programowanie z wykorzystaniem Symfony, CakePHP, Zend Framework”. Jej opis możecie znaleźć w serwisie helion.pl. Książka jest nowa, kilka razy otwierana.

Dlaczego chcę oddać tą książkę?

Ponieważ informacje w niej zawarte nie są mi do niczego potrzebne. Zend Frameworka znam na tyle dobrze, że potrafiłbym wytknąć autorom kilka błędów, Cake mnie nie interesuje, podobnie jak Symfony.

Czy książka jest warta uwagi?

To zależy. Ja nic ciekawego w niej nie znalazłem. Z drugiej jednak strony ktoś, kto posiada już jakąś wiedzę na temat danego frameworka, może chcieć tą wiedzę uporządkować. Jeśli chcecie poznać opinie na temat tej książki, odsyłam na forum.php.pl. Znajdziecie tam stosowny temat.

Jak zdobyć książkę?

Jeśli nadal jesteście zainteresowani książką, wystarczy, że napiszecie do mnie wiadomość (w prawej kolumnie znajduje się link do formularza kontaktowego). W temacie wiadomości wpiszcie Oddam książkę w dobre ręce (ortografia, wielkość liter oraz polskie znaki mają znaczenie). Ponieważ książkę mam tylko jedną, oddam ją pierwszej osobie, która wyśle wiadomość. Jedyny koszt jaki trzeba będzie ponieść w związku z książką, to opłata za przesyłkę. Rodzaj przesyłki ustalę bezpośrednio z osobą,  która wygra książkę.

Zapraszam do zabawy.

Autor wpisu: sokzzuka, dodany: 18.05.2010 09:06, tagi: php

Phpdoc jest bardzo przydatnym narzędziem używanym do automatycznego generowania dokumentacji z kodu. Ma on jednak poza tym jeszcze inne zastosowania.

Jednym z nich, a właściwie zastosowaniem jego tagów jest pomoc w podpowiadaniu kodu. Jako, że większość swoich projektów php-owych pisze w Netbeans, postanowiłem przybliżyć kilka sposobów na ułatwienie sobie życia.

Jeszcze krótkim słowem wstępu, jak wyglądają tagi phpdoc-a ?

/**
* @param integer $a
*/
function foo($a){
    return $a+1;
}

Jak widzimy tagi pisane są w komentarzu, który zaczyna się od dwóch gwiazdek ‘/**’ i znaku nowej linii. Otwierając komentarz i pisząc właśnie ‘/**’ i wciskając enter, netbeans sam wstawi nam template do uzupełnienia tagów.

Pytanie teraz, jak tagi phpDoc-a mogą nam ułatwić życie, poprawić komfort pisania kodu ? To proste, w php nie da się deklarować typu zmiennych oraz tworzyć typowanych argumentów funkcji (oprócz typowania na klasy i interfejsy). Wobec tego IDE ma ograniczone możliwości podpowiadania. Co więcej, gdy używamy magicznych funkcji __get i __set, sprawa staje się jeszcze bardziej beznadziejna.

Przydatne tagi i przykłady zastosowania:

  • /*@var $zmienna NazwaKlasy */ -  używany wewnątrz funkcji, działa jak deklaracja typu zmiennej w językach statycznie typowanych, np. C czy Javie (tag obsługiwany tylko w netbeans)
  • @var TypParametru – używany w klasie przed deklaracją właściwości klasy
  • @param TypParametru $zmienna – używany przed deklaracją metody/funkcji mówi jaki typ ma parametr przekazywany do funkcji
  • @property TypParametru $zmienna – używany przed deklaracją klasy, informuje o właściwościach klasy implementowaych przez magiczne metody __get i __set
  • @property-read – j.w tylko dla właściwości tylko do odczytu
  • @property-write – j.w tylko dla właściwości tylko do zapisu
  • @method TypZwracany nazwaMetody() - używany przed deklaracją klasy, deklaruje metodę implementowaną przez magiczną metodę __call
  • @return TypZwracany – informuje o typie zwracanym przez funkcje/metodę

Dzięki stosowaniu tych tagów w swoich projektach, można wymiernie poprawić swoją efektywność w pisaniu kodu, oraz jako skutek uboczny mieć automatycznie wygenerowaną podstawową dokumentacje.

P.S inne edytory też to obsługuja (np. Eclipse)

Autor wpisu: Damian Tylczyński, dodany: 15.05.2010 21:14, tagi: php

Poświęciłem kilka minut na zaprezentowanie i skomentowanie nowej propozycji, która pojawiła się na stronach wiki PHP. Jest naprawdę ciekawie.
Wszystkie wpisy należą do ich twórców. PHP.pl nie ponosi odpowiedzialności za treść wpisów.