Niezalogowany [ logowanie ]
Subskrybuj kanał ATOM Kanał ATOM

Autor wpisu: Wojciech Sznapka, dodany: 11.06.2014 21:57, tagi: oop, php

One of my favorite PHP interview questions, is: what is Type Hinting and why it’s important? Putting definition in one sentence, Type Hinting is a way to define type of parameter in function signature and it’s a sine qua non to leverage polymorphism. Because of dynamic typing in PHP, parameters don’t need to have type used. Also, by type here, I mean complex types (class, abstract class, interface, array, closure), not primitives like integer or double. So given the fact, that Type Hinting is optional and we don’t need to specify types of parameters passed to the method – why bother? Answer is easy: well prepared method signatures defines your model and are part of the “contract” that your code reveals to its consumers. It also prevents many silly errors and keeps codebase clean and coherent.

Now, if we all agree that Type Hinting is the way to go, what should we put in method signatures? We have few options: concrete class, base class or an interface. It all depends on situation. The most flexible way is the interface, because it’s small definition of object behavior and one class can implement multiple interfaces. Moreover, interfaces can be very easily mocked (by both mock tools, like Mockery or by mocks written by hand). All those adds up into great flexibility

Other option is to set class as type hint. You’re limited to this class instances and their descendants. Having multi-tier hierarchy graph, it’s often good idea to use a class in hierarchy near the root or even abstract class, which gives us possibility to apply method to whole graph of inheritance.

The least flexible way is to set a concrete class (near to final or not ever extended in current sytem). In such case you limit method only to serve for such objects, which is understandable, when method does a specific job.

Three options were presented above (interface, base class and concrete class). There’s one more, very important thing, that need to be kept in mind. Although PHP allows you to call methods outside the type that is defined for the method, you should never do that! It can lead to some bizarre errors and brakes Liskov Substitution Principle. Simply said: if you use a type in method’s signature, then it should rely only on this type, not it’s descendants (even we know about their existence), so you can substitute give type with new subclass without altering method body.

Have a look at possible violation of Liskov Substitution Principle:

class UserRepository extends \Doctrine\ORM\EntityRepository
{
    public function findActiveUsers()
    {
        // do some query to retrieve the result
        return $activeUserCollection;
    }
}

// .. 

public function notifyActiveUsers(EntityRepository $repo)
{
    if ($repo instanceof UserRepository) {
         $usersCollection = $repo->findActiveUsers();
    } elseif ($repo instanceof ManagersRepository) {
         // .. do someting else
     }
    // do something with $usersCollection
}

As we can see, type hinted method notifyActiveUsers internally relies on specific extension of EntityRepository. This breaks LSP and leads to unreadable model. Even worse situation can be following:

Czytaj dalej tutaj (rozwija treść wpisu)
Czytaj dalej na blogu autora...

Autor wpisu: matipl, dodany: 09.06.2014 19:17, tagi: php

PHPCon Poland 2014

Od 5 czerwca każdy z Was ma wpływ na tegoroczną agendę PHPCon Poland, wystarczy oddać głosy na najlepsze Waszym zdaniem propozycje. Na podstawie wyników sondy Organizatorzy ułożą ostateczną agendę, która zostanie zaprezentowana w lipcu.

A jest w czym przebierać – na liście jest ponad 50 prezentacji. Możecie głosować na takie tematy jak „PHP Azure, a bright new day!” czy „Community Works for business too” (Michelangelo van Dam). W przypadku gdy bardziej lubicie techniczne aspekty PHP do wyboru macie również „Wzorcje projektowe Map-Reduce” (Wojciech Sznapka), „PHP 5.6 i okolice” (Leszek Krupiński), czy „HHVM dla PHP i Hack” (Mariusz Gil).Pamiętaj – Twój głos jest ważny!

Dodatkowo, jeśli jesteście już zdecydowani, aby wziąć udział w tegorocznym PHPCon Poland to wczesne zapisy (Early Bird) zostały już otwarte. Koszt uczestnictwa wraz z pobytem hotelowym zaczyna się od kwoty 220 zł.

Autor wpisu: Jacek Skirzyński, dodany: 31.05.2014 23:48, tagi: php

Kiedy projekt dochodzi do etapu, w którym trzeba/warto pokazać go „na zewnątrz” trzeba go jakoś wdrożyć na serwerze. Automatyzacja całego procesu budowania i wdrożenia jest ważna a wgranie plików na serwer jest jednym z etapów. W jego realizacji z wykorzystaniem FTP może pomóc Phing i zadanie FtpDeployTask. Żeby móc z niego skorzystać trzeba mieć w systemie pakiet PEAR: Net_FTP.

<ftpdeploy 
  host="${ftp.host}" 
  port="${ftp.port}" 
  username="${ftp.username}" 
  password="${ftp.password}"
  dir="${ftp.dir}" 
  passive="false"
  <fileset dir="dist">
    <include name="**"/>
  </fileset>
</ftpdeploy>

Jak widać powyżej użycie tego zadania jest banalnie proste (jeżeli jednak nie, to polecam moje wcześniejsze wpisy nt. Phinga).

Za dobry pomysł uważam budowanie projektu dla środowisk „zewnętrznych” w osobnym katalogu (ignorowanym przez IDE). Dzięki temu można uwzględnić strukturę katalogów na serwerze (np. umieszczenie plików wywoływanych przez cron w innym katalogu niż projekt). Dodatkową zaletą jest fakt, że mając odwzorowaną strukturę katalogów z serwera w podkatalogu można również wgrać pliki z wykorzystaniem klienta FTP. Przy mało stabilnym połączeniu internetowym wgranie plików projektu może być utrudnione ponieważ błąd wgrania jednego pliku przerywa wykonywanie całego zadania.

Przydatne linki:

Autor wpisu: Śpiechu, dodany: 17.05.2014 10:11, tagi: php

Zend Certified Engineer LogoMiło mi poinformować, że uzyskałem certyfikat Zend Certified PHP Engineer 200–550 oparty o PHP 5.5. Oznacza to, że moje wpisy dot. PHP mają troszkę większą wagę niż dotychczas. Pytań wam nie powiem, bo mi nie wolno (a ok. 20 pamiętam dosyć dokładnie). Dali papier do podpisania, że będą legal actions jak nie posłucham.

W skrócie o egzaminie:

  • całość w języku angielskim,
  • 70 losowych pytań dosyć dobrze zbalansowanych, trochę z każdej dziedziny,
  • 90 min. czasu (wg mnie wystarczająco), zegarek w prawym górnym rogu,
  • dostajesz mazak i kartkę, na której możesz sobie rzeźbić operacje bitowe,
  • możliwość oznaczania pytań jako flag for review i powrotu jeśli zostanie chwila czasu,
  • nie da się zdać „fuksem”.

Co należy mieć w jednym palcu:

Autor wpisu: Wojciech Sznapka, dodany: 15.05.2014 23:07, tagi: php

Value objects are one of building blocks in Domain Driven Design. They represents a value and does not have an identity. That said, two value objects are equal if their values are equal.

Other important feature is that Value Objects are immutable, i.e. they can not be modified after creation. Only valid way to create Value Object is to pass all required informations to constructor (and should be validated somewhere there). No setter methods should take place.

This post isn’t about obvious advantages of representing domain logic with support of Value Object. As well, we wouldn’t elaborate here about pros and cons of immutable objects. I’d rather would like to show an attempt to change Value Object, keeping it still immutable and using one of most bizarre, in my opinion, feature of PHP language, which is accessing private fields from outside an object.

Often time you would like to alter Value Object, by creating new one based on current (which is only valid way). Altering logic conceptually belongs to Value Object class, so should be located there. In such method, you clone current instance, set new information to given field and return the copy. And this is were accessing private fields for same class makes sense. You can do that without having additional setters which will break the design.

As illustrated above, all Value Object features are in place. This example is of course trivial, but you can imagine a lot more complicated VO’s, like values shared between bounded contexts.

Autor wpisu: matipl, dodany: 12.05.2014 17:37, tagi: php

PHPCon Poland 2014

Już za kilka miesięcy (26-28 września) 5. edycja PHPCon Poland. Po kilku latach z małej konferencji dla miłośników PHP urośliśmy do największej konferencji poświęconej PHP w tej części Europy. W minionym roku było nas już ponad 420 uczestników.

W tym roku PHPCon Poland również odbędzie się na południu Polski, tj. w hotelu Orle Gniazdko w Szczyrku. Dla niektórych może daleko, ale naprawdę warto nie tylko ze względu na konferencję ale również na miejsce.

Zanim rejestracja uczestników zostanie otwarta zachęcam do zgłaszania własnych prelekcji. Organizatorzy czekają do 20 maja (max. 31 maja) na zgłoszenia. Zgłoszeń jest już sporo, ale w tym roku zrządzeniem losu Polacy są w mniejszości. Do dzieła! A jeśli Ty nie masz czasu namów znajomych na zgłoszenie.

Wystarczy wypełnić prosty formularz podając tytuł, abstrakt i link do prezentacji (na tym etapie może to być wersja robocza, abyśmy mieli o czym rozmawiać).

A już w czerwcu co roczna sonda agendowa, po której Prelegenci dowiedzą się o statusie swoich zgłoszeń i zacznie się układanie agendy.

Autor wpisu: stormfly, dodany: 08.05.2014 15:12, tagi: php

Wpis o tym w jaki sposób dodać, edytować, usunąć, pobrać oraz wylistować wydarzenia znajdujące się w kalendarzu google przy pomocy biblioteki z Zend Framework 1 o nazwie Zend_Gdata. Połączenie z kontem: Dodanie nowego wydarzenia: Edycja zdarzenia: Usunięcie...
Wszystkie wpisy należą do ich twórców. PHP.pl nie ponosi odpowiedzialności za treść wpisów.