Nette Utils na PHP 7.2

08.04.2018
2 min read
346 words

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

Update 23.4.2018

Jak David poznamenal v komentářích, nette/utils: 2.4 vám bude fungovat i na PHP 7.2, pouze tehdy, pokud vy nebo nějaká knihovna nepoužíváte Nette\Object. Pro zjednodušení tu je nette/utils: 2.5, které vám pomůže s nalezením těchto míst.


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.

Currently working

I am currently digging deeper to serverless stuf. Also trying to do my best around Nette [contributte.org & componette.org]. Taking care of 242 libraries across various Github organizations.