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

Autor wpisu: matipl, dodany: 14.07.2014 14:09, tagi: php

php-logo

Już niebawem doczekamy się kolejnej wersji PHP. Na początku czerwca ukazała się ostatnia beta, tym samym zamknięto listę zmian funkcjonalnych. Przed nami już tylko wersje RC (Release Candidate).

Zmiany

Przede wszystkim wprowadzenie nowego operatora ** (do potęgi). Na pewno ułatwi to pisanie bardziej matematycznych aplikacji:

$a = 2**3; // $a = 2^3 = 8
$b = 2**3**2; // $b = 2^(3^2) = 512

Od teraz kodowanie UTF-8 jest uznawane za domyślne w ramach całego PHP (default_charset). Dodatkowo kodowanie ustawione za pomocą default_charset będzie automatycznie ustawiało kodowanie dla funkcji związanych z kodowaniem, np. htmlspecialchars(). Ustawianie kodowania dla iconv/mbstring zostsało uznane jako przestrzałe i zobaczymy deprecated.

W PHP 5.6 możemy wielokrotnie korzystać w ramach wywołania aplikacji z php://input, od teraz nie jest czyszczone po pierwszym użyciu. Chciałoby się rzec, dlaczego tak późno?

Na pewno spora część z Was korzysta z GMP (GNU Multiple Precision). Wcześniej aby dodać 2 liczby musieliśmy skorzystać z gmp_add, obecnie wystarczy użyć operatora +, który został przeciążony.

Jeśli chodzi o sprawy bezpieczeństwa, to została dodana funkcja hash_equals(), która ma za zadanie porównać 2 zakodowane hasła zawsze w tym samym, stałym czasie. Dodano również obsługę algorytmu hashującego gost-crypto. Dodatkowo została mocno rozwinięta obsługa SSL/TLS w PHP 5.6 (m.in. łagodzenie ataków renegocjacji TLS, obsługa certyfikatów fingerprint). Jest tego naprawdę sporo.

Porządki

Od pewnego czasu zespół developerów PHP stara się pozbyć starych, problematycznych funkcji czy rozwiązań. I tak wraz z wersją PHP 5.6 otrzymamy błąd E_DEPRECATED, tzn. że w przyszłości zostaną całkowicie usunięte z języka:

  • możliwość włączenie w php.ini dyrektywy always_populate_raw_post_data
  • tym samym zostanie usunięta możliwość korzystania z $HTTP_RAW_POST_DATA, w takim wypadku powinniśmy użyć php://input

To nie wszystko, zmieni się również zachowanie niektórych składowych języka:

  • json_decode jest bardziej restrykcyjny, tzn. w przypadku użycia True zamiast true, False zamiast false, czy Null zamiast null zostanie rzucony błąd
  • zasoby GMP od teraz są zawsze obiektami
  • funkcje mcrypt wymagają od teraz podania prawidłowego klucza i IV
  • domyślnie wszystkie kodowane streamingi mają teraz domyślnie włączoną weryfikację połączenia

Wydajność

LornaJane po wydaniu PHP 5.6 beta2 przeprowadziła kilka testów wydajności środowisk, od wersji 5.3 do 5.6. Wykorzystała do tego bench.php:

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

Autor wpisu: matipl, dodany: 12.07.2014 07:36, tagi: php

PHPCon Poland 2014

Kilka dni temu została ogłoszona przez Organizatorów agenda tegorocznego spotkania miłośników języka PHP. Z zapisami lepiej nie czekać, na tą chwilę na pewno zobaczycie prawie 300 uczestników, chociaż liczba samych zgłoszeń wciąż rośnie (obecnie 408).

Dokładny harmonogram (godzinowy) zostanie udostępniony na przełomie sierpnia/września. Obecnie możemy cieszyć się listą tematów i osób, które na pewno zobaczymy w Szczyrku. Ale do rzeczy, będzie trochę o frameworkach, z naciskiem na Symfony 2. Do tego posypka w postaci teorii architektury oprogramowania, sporo o tworzeniu API, HHVM, skalowaniu aplikacji oraz testach. Miejscami może wydawać się Wam, że to „standardzik”, ale zapewniam będzie czego posłuchać, szczególnie doświadczeń praktyków. Najlepsze smaczki?

  • Architektura Symfony2 (Michał Pipa)
  • Game of performance – Message brokers behind the scenes (Piotr Pasich)
  • Migracja GoldenLine do Symfony2 (Sebastian Grodzicki)
  • Skalowanie aplikacji PHP (Leszek Krupiński)
  • Domain Driven Design w PHP (Wojciech Sznapka)
  • (GoldenLine)… czyli kod ‚Symfony2 way’ na prawdziwym przykładzie (Karol Traczykowski)

Na koniec przypomnę, że w tym roku „testowo” w piątek będą organizowane warsztaty przed samymi prelekcjami. Moim zdaniem największym rodzynkiem będzie „Narzędzia Scrum Mastera” prowadzone przez  Kate Terlecką. Zapraszam.

Autor wpisu: zleek, dodany: 08.07.2014 12:36, tagi: php

Pracując nad projektem wykorzystującym bazę danych, czasami zachodzi potrzeba sprawdzenia zapytań, które są wykonywane na naszej bazie danych. Szczególnie przydatne jest to wówczas, gdy wykorzystujemy mechanizmy ORM (Doctrine lub natywny mechanizm wbudowany w Zend Framework). W takiej sytuacji nie musimy wprowadzać korekt do naszego projektu, aby zobaczyć wygenerowane zapytania – wystarczą trzy zapytania po stronie […]

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:

Wszystkie wpisy należą do ich twórców. PHP.pl nie ponosi odpowiedzialności za treść wpisów.