Niezalogowany [ logowanie ]
Subskrybuj kanał ATOM Kanał ATOM

Autor wpisu: matipl, dodany: 23.07.2010 09:19, tagi: php

Wczoraj ekipa PHP wydała kolejne wersje z rodziny 5.3 oraz 5.2. Jak widać okres wakacji nie dla wszystkich oznacza wylegiwania się na plaży.

Bardzo mnie cieszy, że kolejny raz w 2010 roku doczekaliśmy się aktualizacji. I to nie byle jakiej…

PHP 5.2.14 zamrożone

Jak zapowiadano wcześniej wersja 5.2.14 kończy linię 5.2. W żaden sposób nie będzie rozwijana. Pojawią się ew. łatki na wykryte krytyczne luki. Wszyscy użytkownicy PHP 5.2 proszeni są o aktualizację do 5.3. Wersja 5.2.14 przyniosła:

  • załatanie 66 błędów
  • aktualizacja rozszerzenia PCRE

W końcu wymusi to aktualizację do PHP 5.3 na większości maszyn i bardzo mnie to cieszy.

PHP 5.3.3

Po ponad 4 miesiącach ukazała się wersja PHP 5.3.3, która wprowadza dużą zmianę:

Methods with the same name as the last element of a namespaced class name will no longer be treated as constructor. This change doesn’t affect non-namespaced classes.

< ?php
namespace Foo;
class Bar {
public function Bar() {
// treated as constructor in PHP 5.3.0-5.3.2
// treated as regular method in PHP 5.3.3
}
}
?>

Nie dotyczy to programistów, którzy do tej pory nie korzystali z przestrzeni nazw, czyli np. PHP 5.2 lub PHP 4. Poza tym w najnowszej wersji:

  • poprawiono 145 błędów
  • wprowadzono 13 dodatków (m.in. dodano FastCGI Process Manager (FPM))
  • zaktualizowano 2 rozszerzenia (PCRE i sqlite)

Download: PHP

Autor wpisu: sokzzuka, dodany: 23.07.2010 09:00, tagi: php

Na jednym z ostatnich wpisów na internalsach wyszło na jaw, że w najbliższej większej wersji php (5.x lub 6), do obecnej funkcjonalności domknięć (closures) dodana zostanie obsługa $this. Obsługa ta będzie zaimplementowana tak jak opisano w podpunkcie A) odpowiedniego RFC. Oznacza to, że zmienna $this będzie mogła być wykorzystywana tylko w domknięciu stworzonym wewnątrz jakiegoś obiektu i będzie zawsze wskazywała na obiekt w którego kontekście została utworzona. Otwiera to trochę nowych możliwości związanych np z delgacjami – tworzeniem event handlerów itp.

Dla mnie pozostaje jednak pewien niedosyt związany z tym rozwiązaniem. Szkoda, że nie wprowadzono możliwości bindowania zmiennej $this (i innych zmiennych) do aktualnego kontekstu tak jak opisano w zmodyfikowanej propozycji A)

Przy okazji chciałem poinformować, że pokazała się wersja php 5.3.3. Oprócz poprawek błędów została zmieniona jedna ważna rzecz – metody o nazwie takiej samej jak klasa nie są już traktowane jak konstruktory – w przypadku kodu który jest napisany z użyciem namespace’ów – jest to moim zdaniem dobry krok w kierunku usuwania historycznych zaszłości w języku. Mam nadzieje, że w przyszłych wersjach całkowicie usunięte zostaną konstruktory w starym stylu.

Jakie jest Wasze zdanie o wprowadzonych zmianach ?

Autor wpisu: batman, dodany: 22.07.2010 08:00, tagi: php

Wczoraj wystartowała polska wersja serwisu phpforandroid.net. W chwili obcnej jest to tylko kilka wpisów w FAQ oraz pusta strona manuala, jednak z czasem będzie przybywało więcej treści w języku polskim.

I tutaj pytanie do Was. Jakich treści wam brakuje? Co chcielibyście znaleźć w FAQ i w manualu?

Autor wpisu: Śpiechu, dodany: 20.07.2010 21:54, tagi: php, zend_framework

Dzisiaj ostatni wpis dotyczący programowania zgodnego z Zend. Będzie mowa o dokumentacji. Sporo informacji będzie pochodziło z Czystego Kodu [dalej CK]. Przede wszystkim bloki dokumentacji muszą być zgodne z formatem phpDocumentor, czyli /** * Coś tam dokumentuję... */ Współczesne IDE nie mają problemu z pilnowaniem zgodności z tym formatem. Wpisujesz /** naciskasz Enter i masz [...]

Autor wpisu: Damian Rusinek, Piotr Wierzgała, dodany: 18.07.2010 21:50, tagi: symfony

After integrating Symfony with Flex through Zend_Amf, I had to debug it and I needed some logs on server side. Below I present my LoggedAmfServer extending Zend_Amf_Server, which logs all methods called by Flex and its’ responses. You need to pass instance of sfLogger (ie. sfFileLogger) in the constructor.

logger = $l; parent::__construct(); } protected function _handle(Zend_Amf_Request $request) { $responseBody = $request-&gt;getAmfBodies(); $body = current($responseBody); if ($body !== false) { $data = $body-&gt;getData(); if ($data instanceof Zend_Amf_Value_Messaging_RemotingMessage) { $this-&gt;logger-&gt;log(sprintf("[Amf Request] CLIENT: [%s] OPERATION: [%s]. PARAMETERS: [%s].", $data-&gt;clientId, $data-&gt;operation, var_export($data-&gt;body, true))); } } parent::_handle($request); } public function handle($request = null) { $response = parent::handle($request); $body = current($response-&gt;getAmfBodies()); if ($body !== false) { $data = $body-&gt;getData();

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

Autor wpisu: batman, dodany: 18.07.2010 19:30, tagi: php

Kilka dni temu pisałem o starcie projektu PHP for Android. Zaciekawił mnie on na tyle, że postanowiłem dokładniej mu się przyjrzeć, zwłaszcza procesowi tworzenia i wdrażania aplikacji PHP na telefony wyposażone w system operacyjny Android. Teoretycznie sprawa wydawała się prosta – dowolny edytor do edycji plików, emulator do ich testowania oraz lektura dokumentacji. W praktyce okazało się, że nie jest aż tak różowo. Zakładam, że każdy z was posiada edytor, więc ten krok pominę w opisie procesu tworzenia aplikacji.

PIerwszą rzeczą jaką musimy zrobić, aby móc pisać aplikacje w PHP na Androida, jest pobranie emulatora. Można oczywiście testować skrypty w telefonie, jednak jakoś nie mam odwagi instalować testowych wersji na nietestowym telefonie. Emulator pobiera się razem z Android SDK. Na szczęście nie trzeba nic instalować, więc bałaganu w systemie na nie zrobi. Po pobraniu SKD wystarczy je wypakować w dowolnym miejscu i przejść do katalogu tools, znajdjącego się w katalogu głównym. Zanim będziemy mogli uruchomić emulator Androida, musimy stworzyć wirtualną maszynę (AVD – Android Virtual Machine). W tym celu uruchamiamy wiersz poleceń w katalgu tools .W przypadku systemu operacyjnego Windows, wystarczy przytrzymać lewy klawisz Shift, a następnie kliknąć prawym przyciskiem myszy w katalgu. Z menu kontekstowego wybieramy “Otwórz okno polecenia tutaj”. Nastęnie w wierszu poleceń wpisujemy:

android.bat

Po wykonaniu powyższego polecenia, pojawi się okno menadżera AVD.

avd-manager Zanim będziemy mogli stworzyć wirtualną maszynę, musimy pobrać odpowiednią paczkę. Można to zrobić w zakładce Available Packages. Wybieramy interesującą nas platformę i klikamy w przycisk Install Selected. Mój wybór padł na najnowszą wersję Androida – SDK Platform Abdroid 2.2 (jeśli pojawi się błąd podczas pobierania paczki, musicie zaznaczyć w zakładce Settings checkbox “Force https”). Po pobraniu paczki wracamy do pierwszej zakładki. W końcu możemy stworzyć wirtualną maszynę. W tym celu klikamy w przycisk New. W nowym oknie wpisujemy nazwę maszyny wirtualnej, wybieramy wcześniej ściągniętą paczkę oraz podajemy rozmiar wirtualnej karty SD. Pozostałe opcje możemy w chwili obecnej pominąć.

new-avd

Tak utworzoną maszynę wirtualną uruchamiamy poleceniem

emulator.exe –avd batman

W miejscu batman musicie podać nazwę waszej maszyny wirtualnej. Uruchamianie maszyny może zająć kilka chwil (nawet na mocnym sprzęcie), więc uzbrójcie się w cierpliwość. Po uruchomieniu, przywita was następujący widok:

android-emulator

Jeśli macie ochotę pobawić się samym emulatorem, koniecznie zajrzycie do oficjalnej dokumentacji - http://developer.android.com/guide/developing/tools/emulator.html

Środowisko do testowania mamy już prawie zainstalowane. Do instalacji zostały jeszcze dwie aplikacje: ASE oraz PhpForAndroid.apk. Wystarczy, że emulatorze wejdziecie na stronę http://www.phpforandroid.net/, a nastęnie zainstalujecie znajdujące się na stronie wspomniane aplikacje. Instalacja sprowadza się do pobrania paczek instalacyjnych, a następnie ich uruchomienie. W przypadku PhpForAndroid.apk po instalacji musimy uruchomić aplikację, a nastęnie kliknąć w przycisk Install. Dopiero wtedy w telefonie zainstalowany zostanie interpreter PHP. W końcu możemy zacząć pisać aplikacje na Androida w języku PHP.

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

Autor wpisu: Piotr Śliwa, dodany: 17.07.2010 13:31, tagi: symfony, php

Kilka miesięcy temu popełniłem wpis na temat wielostronicowych formularzy, zaprezentowałem tam m. in. mój plugin do symfony, który tą funkcjonalność automatyzuje. Udostępniłem go niedawno w zbiorze pluginów symfony, znajduje się on tutaj. Między czasie został on zrefaktorowany i zostały dodane nowe klasy.

Wprowadzenie

Główną klasą tego pluginu jest psPageableForm, hermetyzuje ona zarządzanie formularzami. Klasa ta ma podobny interfejs co klasa sfForm, jednakże nie rozszerza jej z tego powodu, gdyż zbyt wiele metod musiałoby być unieważnionych. Podstawowymi metodami klasy wielostronicowego formularza to:
  • psPageableForm::addForm(sfForm) - dodanie formularza na koniec listy (formularz zostaje skojarzony z ostatnią stroną)
  • psPageableForm::setForm(sfForm, int) - dodanie formularza na określoną stronę, formularze ze stron wyższych bądź równych stronie podanej jako argument zostają przesunięte o jedną pozycję dalej.
  • psPageableForm::setUseGlobalNamespace(bool) - czy format poszczególnych formularzy składowych ma zostać spłaszczony do jednego wymiaru, czy też format wielostronicowego formularza oraz formularzy składowych mają zostać połączone ze sobą. Domyślna jest ta pierwsza opcja. Należy wywołać przed dodaniem pierwszego formularza składowego!
  • psPageableForm::setNameFormat(string) - ustawia format nazw widgetów wielostronicowego formularza. Należy wywołać przed dodaniem pierwszego formularza składowego!
  • psPageableForm::setCurrentPageNumber(int) - ustawienie obecnej strony formularza
  • psPageableForm::getCurrentPageNumber() - pobranie obecnej strony formularza
  • psPageableForm::bind(array, array) - wypełnienie formularza danymi oraz jego walidacja
  • psPageableForm::isValid() - sprawdzenie czy wszystkie zwalidowane formularze są prawidłowe, nie oznacza że formularz jest w całości poprawny
  • psPageableForm::getCurrentForm() - pobranie obiektu formularza składowego skojarzonego z obecną stroną
  • psPageableForm::setPersistanceStrategy(psPageableFormPersistanceStrategy) - ustawienie strategii trwałości

Istnieje również interfejs strategii trwałości, który deklaruje trzy metody:

  • psPageableFormPersistanceStrategy::persist(psPageableForm) - zapisanie formularza do źródła danych
  • psPageableFormPersistanceStrategy::getValues() - pobranie zapisanych wartości formularza
  • psPageableFormPersistanceStrategy::clear() - wyczyszczenie obiektu
Na dzień dzisiejszy są trzy implementacje tego interfejsu:
  • psPageableFormPostPersistanceStrategy - przechowuje wartości w ukrytych polach formularza
  • psPageableFormSessionPersistanceStrategy - przechowuje wartości w sesji
  • psPageableFormDatabasePersistanceStrategy - przechowuje wartości w bazie danych (wykorzystanie Doctrine)
Ostatnią klasą jest psPageableFormProcess, która automatyzuje przetwarzanie formularza, dba o odpowiednie ustawianie numerów stron podczas niepoprawnej walidacji oraz o odpowiedni stan formularza. Jedyną jej metodą (oprócz konstruktora) to metoda psPageableFormProcess::process(), która to w odpowiedni sposób przetwarza formularz. Dzięki tej klasie kod w kontrolerze jest zredukowany do minimum.

Przykład

Utworzenie wielostronicowego formularza sprowadza się do utworzenia kilku zwykłych formularzy symfony - jeden formularz na jedną stronę. Następnie definiujemy podklasę psPageableForm.

[PHP]
  1. class PageableForm extends psPageableForm
  2. {
  3. public function setup()
  4. {
  5. $this->setNameFormat('form[%s]');
  6. $this->setUseGlobalNamespace(false);
  7.  
  8. //wyłączenie ochrony csrf dla wszystkich formularzy z wyjątkiem ostatniego
  9. $form1 = new Form1(array(), array(), false);
  10. $this->addForm($form1);
  11.  
  12. $form2 = new Form2(array(), array(), false);
  13. $this->addForm($form2);
  14.  
  15. $form3 = new Form3();
  16. $this->addForm($form3);
  17. }
  18. }

W kontrolerze tworzymy obiekt zdefiniowanej klasy, ustawiamy strategię trwałości, tworzymy obiekt klasy psPageableFormProcess z odpowiednimi parametrami oraz wywołujemy metodę psPageableFormProcess::process().

[PHP]
  1. public function executeProcess(sfWebRequest $request)
  2. {
  3. $form = new PageableForm();
  4. $form->setPersistanceStrategy(new psPageableFormSessionPersistanceStrategy($this->getUser()));
  5. $process = new psPageableFormProcess($form, $request, function(){
  6. // funkcja zwrotna wywoływana gdy formularz zostanie w całości poprawnie zwalidowany
  7. }, array('formParameterName' => 'form')
  8. );
  9. $process->process();
  10. $this->form = $form;
  11. }

W szablonie wyświetlamy formularz z obecnej strony.

[PHP]
  1. <form action="<?php echo url_for('module/action?step='.($form->getCurrentPageNumber() + 1)) ?>" method="post">
  2. <?php echo $form->getCurrentForm() ?>
  3.  
  4. <?php if($form->getCurrentPageNumber() > 1): ?>
  5. <a href="?step=<?php echo $form->getCurrentPageNumber() ?>">Wróć</a>
  6. <?php endif; ?>
  7. <input type="submit" value="dalej" />
  8. </form>

Więcej przykładów z kodem źródłowym znajdziecie tutaj.

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

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