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á.
- https://www.zdrojak.cz/clanky/jake-novinky-prinese-php-7-2/
- https://www.zdrojak.cz/clanky/jake-novinky-prinese-php-7-1/
- https://www.zdrojak.cz/clanky/jake-novinky-prinese-php-7/
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.
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. 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.