A következő címkéjű bejegyzések mutatása: PHP. Összes bejegyzés megjelenítése
A következő címkéjű bejegyzések mutatása: PHP. Összes bejegyzés megjelenítése

2010. november 15., hétfő

Professzionális PHP fejlesztés Symfony frameworkkel

Debreceni Egyetem Informatikai Kara által rendezett 5. Informatikai Szakmai Napok rendezvényen kollégánk Zsíros Szabolcs "Professzionális PHP fejlesztés
Symfony frameworkkel" címmel tartott előadást.

Az előadás anyaga elérhető itt: Symfony

2010. március 10., szerda

PHP programozókat keresünk

Frissítve: 2010-03-23

Elvárások:
* PHP 4 és PHP 5 alapos ismerete
* Joomla vagy valamely PHP MVC framework ismerete
* Angol nyelvtudás

Előny:
* Javascript, CSS ismerete
* SQL tapasztalat

Amit kínálunk:
* Versenyképes jövedelem
* Nemzetközi projektekben való részvétel
* Barátságos munkahely Debrecenben

Jelentkezés:
Bessenyei Zsolt
epam.debrecen kukac gmail.com

2010. február 17., szerda

PHP 4 vs PHP 5, 2. rész

Az első rész: http://epam-debrecen.blogspot.com/2010/02/php-4-vs-php-5-1-resz.html

Egy másik gyakori kódtípus, ami nem ugyanúgy viselkedek a különböző verziókban:

class Category {
var $id;
var $parentId;
var $children;

function Category( $id, $parentId=0 ) {
$this->id = $id;
$this->parentId = $parentId;
}
}

$categories[1] = new Category( 1 );
$categories[2] = new Category( 2, 1 );
$categories[3] = new Category( 3, 1 );
$categories[4] = new Category( 4, 2 );
$categories[5] = new Category( 5, 3 );

foreach ( $categories as $id=>$category ) {
// Az újabb verziók automatikusan referencia
// szerinti átadást használnak:
$categories[$category->parentId]->children[$id] = $categories[$id];
// A régebbiekben ezt nekünk kell kényszerítenünk:
$categories[$category->parentId]->children[$id] = &$categories[$id];
}


Pl. adatbázisból kapunk egy halom adatot, ahol a rekordok között szülő-gyermek( 1-n ) viszony van, és szeretnénk egy egyszerűen bejárható fát építeni belőlük minél kisebb költséggel. Erre a problémára adnak a referenciák egy lineáris időben futó, kis költségű lépésekből álló megoldást.

A PHP manualra jellemző, hogy a referenciák felhasználási területei közül pont egy olyat említ, amivel az objektum metódusainak megkerülésével nyúlhatunk hozzá egy taghoz. Rossz szokás, ami az esetek 95%-ában csak ront a kódon:

class foo {
public $value = 42;

public function &getValue() {
return $this->value;
}
}

$obj = new foo;
// $myValue is a reference to $obj->value, which is 42:
$myValue = &$obj->getValue();
$obj->value = 2;
// prints the new value of $obj->value, i.e. 2.
echo $myValue;

Az igazi szépsége a dolognak, hogy private tagokhoz is hozzá lehet férni ezzel a módszerrel :)

B.J.

2010. február 16., kedd

PHP 4 vs PHP 5, 1. rész

Aki PHP-val foglalkozik már megszokhatta, hogy a legtöbb projekten a host korlátai miatt nem használhatja a legújabb verziókat. Különösen igaz ez a legacy fejlesztésekre, ahol gyakran még a 4.x verziókkal kell beérni, mivel az átállás sok helyen nehezen észlelhető bugokat okozna. Az egyik ügyfelünk rendszere is részben 4.x verziójú.

A legegyszerűbben észlelhető probléma rengeteg kényelmi funkció (file_put_contents, paraméterezhető microtime és a többiek) hiánya. Ez kényelmetlen ugyan, de hamar kiküszöbölhető. Valamivel nehezebb hozzászokni az interfészek, absztrakt osztályok, láthatósági szintek és osztályszintű statikus változók hiányához.

Az egyik legkevésbé nyilvánvaló, viszont fontos változás a paraméterek átadásának módja. Az újabb verziók skalárokat és a tömböket érték, minden mást referencia szerint adnak át, míg a régiek az érték szerinti átadást használják objektumok esetén is. Ez legelőször valószínűleg Singletonok használatánál tűnik fel, egy bosszantó és nehezen észrevehető bug formájában:

class Singleton {
function getInstance() {
// PHP 4-ben ez a legegyszerűbb módja
// az instance nyilvántartásának
static $instance;
if ( !$instance ) {
$instance = new Singleton();
$instance->test = "A";
}
return $instance;
}
}
$temp = Singleton::getInstance();
$temp->test = "B";
// PHP 5 esetén B lesz, különben A.
print Singleton::getInstance()->test;

Ez a kód átalakítva, hogy régi phpban is ugyanaz legyen a végeredmény:

class Singleton {
// Jelezzük, hogy a metódus az eredményt
// referencia szerint adja vissza
function &getInstance() {
static $instance;
if ( !$instance ) {
$instance = new Singleton();
$instance->test = "A";
}
return $instance;
}
}
// A visszatérési értéket referencia szerint rendeljük változóhoz
$temp = &Singleton::getInstance();

B.J.

2010. január 31., vasárnap

PHP programozókat keresünk

Frissítve: 2010-02-17

Feladat:
* Külföldi ügyfelünk meglévő site-jának továbbfejlesztése 4-5 fős csapat részeként

Elvárások:
* PHP 4 és PHP 5 alapos ismerete
* Valamely PHP MVC framework ismerete
* Angol nyelvtudás

Előny:
* Javascript, CSS ismerete
* SQL tapasztalat

Amit kínálunk:

* Versenyképes jövedelem
* Nemzetközi projektekben való részvétel
* Barátságos munkahely Debrecenben

Jelentkezés:
Bessenyei Zsolt
epam.debrecen kukac gmail.com

2009. december 10., csütörtök

PHP fejlesztőt keresünk

Egyik csapatunk bővítéséhez PHP fejlesztőt keresünk! A PHP mellett Java tudás előny!

2009. december 2., szerda

PHP Symfony: Egy jól komponált keretrendszer, 2. rész

A srácok a Sensio Labsnál nem csak a Symfony további javításán és kiegészítésén törik a fejüket, de a PHP-s közösség számára elérhetővé tették a Symfony néhány alkotóelemét, többek közt a zseniális templating rendszerét, és a dependency injection containerét is.

A rendszer ajánlható mindenkinek, akinek egy jó, robosztus, széleskörűen támogatott, nagy közösséggel bíró környezetben akarja készíteni mindennapi kódját.

A napokban jött ki az 1.3-as, és az 1.4-es verzió. A kettő között a különbség az 1.4-es verzió backward compatibility opciójának hiánya az 1.0-s verzió felé. Ez egyben azt is jelzi, hogy az 1.4 LTS verziónak lett tervezve, így aki új projectbe kezd, annak érdemes ezt a verziót választania.

Ízelítőnek érdemes megnézni azt a néhány screencastot ami néhány alapvető szolgáltatást hivatott bemutatni:

http://www.symfony-project.org/screencast/cart
http://www.symfony-project.org/screencast/admin-generator

Aztán ha megjött az étvágy, irány a tutorial, illetve az install guide...

További infó:
http://www.symfony-project.org/
http://components.symfony-project.org/

Az EPAM debreceni iroda fejlesztői számára élmény ezzel a frameworkkel dolgozni!

Zs.Sz.

PHP Symfony: Egy jól komponált keretrendszer, 1. rész

Az előző projectjeink egyikén, mely PHP-Java hibrid volt (PHP frontend, Java Webservice backend) Symfony-t használtunk PHP keretrendszernek. Konkrétan 1.0-ás verziót, ami bár már lassan három éves, még mindig jól tartja magát a többi framework között.

Az alap filozófia azóta is vajmi keveset változott: adott egy nagyon jól használható MVC framework, AJAX supporttal, admin felület generálással (a'la Ruby on Rails, Groovy on Grails, etc.), és sok-sok pluginnel, amelyekkel a legtöbb dolgot pikk-pakk össze lehet pakolni.

Az 1.0-ás verzió alapból Propel-t használt ORM réteg gyanánt, annak is az 1.2-es verzióját, aminek a Creole-os alapja kis performancia-veszteséget okozott, de egyrészt a Symfony 1.2-es verziója óta a Propel-t update-elték 1.3-asra (ami már PDO-t használ adatbázis absztrakcióra), másrészt (sokak örömére) out-of-the-box tartalmaz Doctrine-t is, ráadásul alapértelmezettként. Persze a Doctrine hiánya korábban sem volt akadály a Symfony-t használni akaróknak, pluginként azt is könnyen összepászító a keretrendszerrel.

A Prototype Javascript framework is megtalálható a Symfony-ban már kezdetek óta (a rendszer Javascript helperei is ezen alapulnak), de ha éppen nem ezzel szimpatizálunk, akkor (mondani sem kell) a pluginok között találhatunk jQuery, YUI, Ext, Dojo librarykat segítő kiegészítőket is.

Zs.Sz.

2009. november 26., csütörtök

Reklámok a keresőkben: PHP és NuSOAP

Egyik csapatunk olyan alkalmazást fejleszt, amely az ügyfél PHP-s rendszerét univerzális kereső reklám (Search Engine Advertising) motorral egészíti ki. Ezen motor segítségével kanonikus alakra hozott adatok alapján bármilyen SOAP XML generálható és az adott szolgáltatónak (Google - AdWords, MSN - AdCenter, Yahoo - EWS) elküldhető.

A feladat szépsége az, hogy csak egyetlen UI felületet kell felparaméterezni, mindig csak ugyanazokat az inputokat megadva, majd a motor ezeket az adatot felhasználva egy saját formátumot hoz létre, amiket egy rekurzív algoritmus XML-lé alakít.

Minden szolgáltatónak definiáltuk az XML struktúráit: milyen XML-t fogad és ad vissza, amit a PHP környezetben inkább ismert YML formátumú fájlokban írtuk le. A motor ezt a leírót felhasználva állítja elő a megfelelő XML-eket az input adatokból.

Az ügyfél ezután pár kattintással célzott reklám kampányokat generálhat a hírdetési piac minden nagy szereplőjének a rendszerébe.

M.I.

2009. november 17., kedd

Olasz meló

Kollégánk pár napot Rómában töltött az egyik ügyfél kérésére. A munka Java és PHP kódolás, egyelőre a PHP oldal erősítése van tervezve, akár lehet jelentkezni is!

Szerencsére jutott idő néhány fényképet is készíteni:

A Colosseum éjjel és nappal:




A Vatikán múzeum és a Szent Péter bazilika:




Úgy látszik hazafelé már sietős volt az út: