Autor | Zpráva | ||
---|---|---|---|
Tomášeek Profil * |
#1 · Zasláno: 17. 10. 2016, 09:08:59
Ahojte,
zkouším teď rozjet nějakou běžící a jinde fungující aplikaci na serveru s PHP 5.3.3.7 (ano, letité, upgrade nyní nepřichází v úvahu, bohužel). Kód je následující: <?php namespace x\y; use a; use b; use c; class d implements e { use f; // tady je chyba private g; ... } ?> Chybovou hlášku jazykově chápu, ale nedaří se mi najít, proč k ní dochází, ani po vyhledávání nejsem moudřejší (jasně, PHP očekává funkci namísto use). Přitom o pár řádků výše use evidentně funguje/projde. Našel jsem jen rady typu "upgrade na PHP 5.4", byly z doby pár let zpět. To ale není v tuto chvíli možné. Bohužel.
Jak této chybě předejít (resp. to řešit starším povoleným způsobem, tzn. jak nahradit use funkcí tak, aby funkčnost zůstala stejná), a proč vzniká zrovna v tomto místě? Zkoušel jsem use přesunout k ostatním, to ale končilo také chybou (jinou). Důvod užití use na tomto místě má asi svůj účel.
Poznámka: jména jsem přepsal pro ukázku kódu, nemyslím, že jsou nyní podstatná a nevím, jestli je vynášet ven. Děkuji. PS: poznámky o stařičké verzi PHP prosím nechte stranou, vím o ni a nemohu s ní momentálně nic dělat. |
||
juriad_ Profil * |
#2 · Zasláno: 17. 10. 2016, 09:47:14
V tomto případě se vůbec nejedná o namespacy, ale traity, a ty jsou podporované od PHP 5.4.
php.net/manual/en/language.oop5.traits.php Můžeš zkusit místo use f; přímo vložit obsah trait f { ... } . Toto by mělo fungovat v jednoduchých případech, ale v těch složitějších bude nutné hodně ručního ladění, kvůli dědičnosti a řešení konfliktů.
|
||
Tomášeek Profil * |
#3 · Zasláno: 17. 10. 2016, 09:54:03
juriad:
O traitu jsem četl, tvůj kód jsem asi také možná zkoušel, končil chybou unexpected T_STRING, expecting T_FUNCTION , protože podpora Traitů je od PHP 5.4, viz i tvůj uvedený odkaz.
|
||
Časová prodleva: 8 let
|
0