Nette Utils na PHP 7.2 08/04/2018

S příchodem PHP 7.2 a rezervovaným slovem object musely nastat úpravy v nette/utils balíčku. Pojďme se podívat, co je potřeba upravit.

PHP 7.2

S příchodem PHP 7.2 přišla celá řada novinek a úprav. Jednou z novinek, které mohou rozbít váš kod, je nově definované klíčové slovo object.

Na téma novinek v PHP 7.2 se pěkně rozepsal Martin Hujer na Zdrojáku, doporučuju se podívat. Klidně mrkněte i na PHP 7.1 a PHP 7.0, je možné, že jste už leccos zapomněli. Stejně jako já.

Nette Object

Dlouhá léta, někde od roku 2010, máme v Nette třídu Nette\Object. Pokud se vám to nezdá, tak od roku 2006 existovala třída NObject, která by pravděpodobně fungovala i v PHP 7.2.

Pokud stále používáte ve svých aplikacích již zmíněný Nette\Object, nebude vám fungovat na PHP 7.2. Nahraďte jeho použití za trait Nette\SmartObject. Pozor však! Trait Nette\SmartObject není náhrada 1:1.

Více se o tom rozepsal David na fóru, Jak se vypořádat s Nette\Object.

Verze nette\utils: 2.5.x generuje při použití Nette\Utils\ObjectMixin deprecated noticky. Použijte SmartObject. Drobný thread je o tom také na fóru, Nette Utils 2.5 – deprecated Nette\Object. Doporučuji se vždy podívat na Github repozitář, abyste si ověřili, zda dané třídy existují a v jakých verzích existují.

Na PHP 7.2 budete potřebovat nette\utils: ~2.5.0 a vyšší, z důvodu, že ve verzi <2.5.0 je stále k dispozici Nette\Object.

SmartObject

Trait Nette\SmartObject se liší v několika věcech:

  • podporuje emulované properties, jen pokud je na třídě zapsaná anotace @property typ $nazev
  • nepodporuje extension methods
  • nepodporuje getReflection
  • nepodporuje získávání metod jako $this->formSubmitted (je třeba nahradit za klasický callback [$this, 'formSubmitted'])

Více informací na Nette fóru, Pojďte otestovat Nette 2.4 RC


Narazili jste na nějaké další problémy při přechodu na PHP 7.2 s Nette? Dejte mi o tom vědět v komentáři. Díky.