Článek upozorňuje na smutný fakt, že i v nových verzích PHP se umí objevit chyba, díky kterým přestanou fungovat základní jazykové konstrukce a funkce.

PHP je jazyk plný překvapení. Takové Kinder Surprise pro dospělé programátory. Psaní aplikací v PHP je adrenalinovým sportem – i pojišťovny k tomu tak přistupují.

Naivní prosťáček nebo PHP laik by při pohledu na tento kód…

$arr = array();
$arr['XB@'] = 'La';
$arr[2089710047] = 'Trine';

unset($arr['XB@']);

// hádejte - co se vypíše?
print_r($arr);

…mohl mít pocit, že ví, co se vypíše. Ale ostřílený profesionál by nejprve kontroval otázkou: „V jaké verzi PHP?“ A rozhodně by se nespokojil s odpovědí „V pětce.“ Když se ptá na verzi, zajímá ho každá setinka. Protože třeba PHP 5.1.2 odstraní (unset) z pole jiný prvek, než verze 5.1.3. Stejně tak 4.4.2 versus 4.4.3.

To je péhápé. To se ví!

V aplikacích psaných pod PHP nestačí neuvádět minimální požadovanou verzi, vhodnější je zmínit výčet verzí, pod kterými dost možná i funguje. Třeba pokud používáte overloading…

class OverloadTest
{
	private $arr;

	public function __set($name, $value)
	{
		$this->arr[$name] = $value;
	}

	public function &__get($name)
	{
		return $this->arr[$name];
	}
}

$test = new OverloadTest();
$test->a['x'] = 'item';

…tak vězte, že nemusí korektně fungovat v PHP 5.2.0. Nicméně v předchozích i následujících verzích ano. Obzvláště pikantní je, že overloading miluje Zend Framework, takže kupříkladu jejich Zend_Session je pětdvanulkou taktéž ochromen. Doporučují upgradovat na 5.2.1, ovšem ani to nemusí být gór dobrý nápad. Proč?

Procházíte ve své aplikaci pole pomocí foreach a používáte funkci key? Pak vám nemusí fungovat v PHP 5.2.1 a novějších. Přitom v minulosti z podobných důvodů nefungovalo třeba Texy v PHP 4.4.1. Historie se opakuje.

Simply PHP

Programovat v Javě umí kdekdo. O ASP.NET ani nemluvě. Jen v PHP píši skuteční hrdinové. Renesanční bytosti. Fascinující a neskutečně trpěliví lidé. Trpěliví od slova trpět.

Třeba já.