Ce vine nou în PHP 5.5

finally

Cuvântul cheie finally completează constructul try .. catch ... Acesta marchează instrucțiunile ce vor fi urmate indiferent dacă vor fi prinse excepții sau nu. Perfect pentru situații când vrei să manipulezi rezultatul constructului try .. catch, procesând codul neriscant in blocul finally. O altă utilizarea ar fi procesul de curățare a codului, spre exemplu, asigurând că nu încerci să închizi același stream de mai multe ori.

list în foreach

Construcția list există încă din PHP4, dar nu era posibil să fie folosită într-un foreach. În PHP5 poți folosi list în mod direct pentru a mapa variabile dintr-un array multidimensional

$agenda = array(
   array('Martinel', '0727000000'),
   array('Toto', '0727010101')
);

foreach($agenda as list($nume, $tel)) {
	echo "$nume :: $tel \n";
}

Generatori

Îți permite să creezi funcții ce își păstrează starea de la o rulare la alta. Se folosește de un nou construct, yield, ce poate fi folosit atât pentru input cât și pentru output.

Când ajunge la o linie ce conține yield, PHP va îngheța execuția funcției și va continua să ruleze fluxul principal al programului. Când îi spui să continue, PHP se va duce și va dezgheța funcția de unde a rămas, conservând valorile oricărei variabile locale definite până acolo.

Acest construct permite implementarea conceptului de Lazy Evaluation, ce îți permite să definești seturi infinite de date.

Spre exemplu, mulțimea numerelor Naturale poate fi definită astfel:


function numere() {
 $numar = 0;
 while(true) {
   $numar++;
   yield $numar;
 }
}


$num = numere();
$num->current(); // o sa fie 1

/*la next(), PHP dezgheata executia functiei unde a ramas, 
adica in blocul while, deci numar nu se redeclara 
ca fiind 0
*/
$num->next(); 
$num->current(); // o sa fie 2
?>

Celălalt mod în care se mai poate folosi yield este de a trimite data către funcție în timpul rulării.


function perfetsqr() {
	while(true) {
		$v = yield;
		echo ($v * $v) . "\n";
	}
}

$multi = perfectsqr();
for($i = 0; $i < 10; $i++) {
	$multi->send($i);
}

Acesta este un simplu generator de pătrate perfecte. Toți generatorii pornesc dintr-o stare de pauză, din care se dezgheață în momentul în care se trimite un send sau un current până când ajunge la un yield.
Toate aceste lucruri ar fi putut fi făcute în vechiul PHP, însă generatorii ne oferă un mod mai elegant, mai eficient și mai rapid. Plus, un generator poate fi folosit într-un foreach.

Posted in PHP

non-breaking space in MIME encoded, quoted-printable text

in emailurile encodate cu quoted-printable apare un caracter “space” care nu poate fi parsat nici de php nici de C#, acesta reprezinta codul “=C2=A0” in bytes “C2 A0”.

UTF-8 il translateaza in 00A0.

ca sa scapam de acest caracter trebuie sa-l decodam folosind functia “quoted_printable_decode” si apoi sa eliminam sir de caractere “=C2=A0” sau “\xC2\xA0”

mai multe informatii gasiti aici

PHP – create class properties at runtime

How to dynamically create  in PHP a property for an object?

If the object  is $foo you use this syntax: $this->{$property} = ‘a value’;

For example:

<?php

class foo {

public function setProperty($n, $v)
{
   $this->{$n} = $v;
}

}

$foo = new foo();
$foo->setProperty('property1','value1');
echo $foo->property1; //will display value1
?>

pagination on google custom search

in the google custom search results pagination will not keep the number of page just visited,
for example if you go to the page 3 and go back via browser button you will get results from the first page.

To keep visited page some custom modifications should be implemented:

step 1:
In the function searchCompleteCallback(), we need to add to all links parameter &page= with calculated page counter

ex:

if(back_page == '')
 back_page = 0;
else
 back_page = (back_page*10)-10;

with javascript append all links with this parameter.

…’&page=’+back_page;

step 2:

in the function google.setOnLoadCallback(function(){ set the parameter with google custeom search key,to use this application, and concatinate parameter with page number

var customSearchControl = new google.search.CustomSearchControl(‘gcs_customer_key’+’&start=’.$_GET[‘page’]);

This will point the results from the google custom serach to the right page number.

jqGrid – client-side solution loading data dynamically through Ajax callbacks

jqGrid is an Ajax-enabled JavaScript control that provides solutions for representing and manipulating tabular data on the web. Since the grid is a client-side solution loading data dynamically through Ajax callbacks, it can be integrated with any server-side technology, including PHP, ASP, Java Servlets, JSP, ColdFusion, and Perl.

jqGrid’s Home page can be found here

Cookies won’t work in IE if your site is inside an IFRAME

Internet Explorer gives lower level of trust to IFRAME pages (IE calls this “third-party” content). If the page inside the IFRAME doesn’t have a Privacy Policy, its cookies are blocked.

However if you add  a header like this (in PHP) it will work:

header(‘P3P:CP=”NOI CURa ADMa DEVa TAIa OUR BUS IND UNI COM NAV INT”‘);

This sets a  P3P header with a privacy policy that is acceptable to IE, and the cookies will be accepted.

More info: here and here.

A tool for generating policy privacy can be downloaded here.

Managing Hierarchical Data in MySQL

Exemple de generare categoriilor ierarhic din SQL

exemplu:

LOCK TABLE nested_category WRITE;

SELECT @myRight := rgt FROM nested_category
WHERE name = ‘TELEVISIONS’;

UPDATE nested_category SET rgt = rgt + 2 WHERE rgt > @myRight;
UPDATE nested_category SET lft = lft + 2 WHERE lft > @myRight;

INSERT INTO nested_category(name, lft, rgt) VALUES(‘GAME CONSOLES’, @myRight + 1, @myRight + 2);

UNLOCK TABLES;

SELECT CONCAT( REPEAT(‘ ‘, COUNT(parent.name) – 1), node.name) AS name
FROM nested_category AS node,
nested_category AS parent
WHERE node.lft BETWEEN parent.lft AND parent.rgt
GROUP BY node.name
ORDER BY node.lft;

+———————–+
| name |
+———————–+
| ELECTRONICS |
| -TELEVISIONS |
| – -TUBE |
| – -LCD |
| – -PLASMA |
| -PORTABLE ELECTRONICS |
| – -MP3 PLAYERS |
| – -FLASH |
| –CD PLAYERS |
| –2 WAY RADIOS |
+———————–+

Soursa: aici