Probao sam samo prešaltati verziju PHP-a na 7.4 i iskočile su sljedeća upozorenja/greške:
1. Warning: "continue" targeting switch is equivalent to "break". Did you mean to use "continue 2"? in some_script.php on line 497
2. Warning: Parameter 2 to qtranxf_postsFilter() expected to be a reference, value given in some_script.php on line 286
3. Warning: Use of undefined constant replace_meta_widget - assumed 'replace_meta_widget' (this will throw an Error in a future version of PHP) in some_script on line 21
4. Fatal error: Uncaught Error: Call to undefined function split() in some_script.php on line 154
Upozorenja 1 & 2 su se pojavila gotovo na svim WP site-ovima, dok greška 3&4 se pojavila samo na jednom siteu.
Nekako mi se greške/upozorenja ne čine strašnima, pa se pitam jel se bolje baviti samo tim greškama…ili slijediti neku proceduru za kompletnu migraciju WP na novi PHP. Kako bi išla ta procedura?
1. Warning: "continue" targeting switch is equivalent to "break". Did you mean to use "continue 2"? in some_script.php on line 497
Code je sljedeći, switch statement:
function qtranxf_translate_post($post,$lang) {
foreach(get_object_vars($post) as $key => $txt) {
switch($key){//the quickest way to proceed
//known to skip
case 'ID'://int
case 'post_author':
case 'post_date':
case 'post_date_gmt':
case 'post_status':
case 'comment_status':
case 'ping_status':
case 'post_password':
case 'post_name': //slug!
case 'to_ping':
case 'pinged':
case 'post_modified':
case 'post_modified_gmt':
case 'post_parent': //int
case 'guid':
case 'menu_order': //int
case 'post_type':
case 'post_mime_type':
case 'comment_count':
case 'filter':
continue;
//known to translate
case 'post_content': $post->$key = qtranxf_use_language($lang, $txt, true); break;
case 'post_title':
case 'post_excerpt':
case 'post_content_filtered'://not sure how this is in use
{
$blocks = qtranxf_get_language_blocks($txt);
if(count($blocks)>1){//value is multilingual
$key_ml = $key.'_ml';
$post->$key_ml = $txt;
$langs = array();
$content = qtranxf_split_blocks($blocks,$langs);
$post->$key = qtranxf_use_content($lang, $content, $langs, false);
//$post->$key = qtranxf_use_block($lang, $blocks, false);
$key_langs = $key.'_langs';
$post->$key_langs = $langs;
}
} break;
//other maybe, if it is a string, most likely it never comes here
default:
$post->$key = qtranxf_use($lang, $txt, false);
}
}
}
Ispada da je to samo warning da se “continue” ponaša kao “break”. Taj warning dolazi u php7+, nije bio u php5.
Mene zanima jel se taj code možda drugačije ponašao u php5, ali koliko sam ja uspio čačkati, “continue” & “break” se isto ponašaju u switch statementu i u php5-ici.
Jesam li što previdio, nisam siguran …ali čini mi se da taj continue je isti vrag ko i break i za php5 i za php7+.
Izolirao sam switch da testiram… stavio continue 2 i bio je fatal error. A u orginalnom codu nije bio fatal error … palo mi kasnije na pamet da “continue 2” moze biti samo ako je switch unutar loopa… da je tako nesto u igri … s moba sam sad, probam kasnije…
Ok, istražio sam situaciju.
Kaže da se switch statementi:
continue;
break;
continue 2
…ponašaju identično i u php5 i u php7+. Samo što php7+ baca to upozorenje da su continue & break isti vrag unutar switch statementa.
Sada još jedino nebi bilo loše skužiti što su autori gornjeg codea željeli reći… pošto oni koriste unutar tog switcha i “continue” i “break” … a oboje se ponaša jednako unutar switch statementa.
Pa da nisu oni možda htjeli pisati “continue 2”? … ali ni to nema smisla kada se u petlji ne nalazi ništa nakon toga switcha, pa se code nebi drugačije u ovom slučaju ponašao niti da je pisano “continue 2”.
Pa ispada da autori nisu baš imali razlog zašto negdje koriste “break”, a negdje “continue”, kada je isti vrag…
Jbg, ti ne želiš uraditi onako kako ti se kaže, čak ni pokušati pa javiti šta je bilo u redu il’ šta nije.
Srećno u daljem rješavanju problema. https://i.imgur.com/JvTnfsG.gif
Nisi me razumio, shvatio sam ja razliku između continue i continue 2.
Ali u ovom konkretnom primjeru codea koji su ostavili autori imaš situaciju da se ništa u petlji ne nalazi nakon switch statementa…pa prema tome u ovom konkretnom primjeru i da se stavi “continue 2”, ne postoji code koji će time biti preksočen.
Tako da u konkretnom primjeru stavi li se continue; break ili continue 2 … rezultat codea će biti u potpunosti isti…
If you have a switch inside a loop and wish to continue to the next iteration of the outer loop, use continue 2 .
I egzaktno baš to imaš - switch u foreach-u.
Čime se ti baviš i kakvim razmišljanjima nec2u ulaziti al’ ne idu u logičnom smjeru rješavanja zadatog problema. Zato mi je mučno pokušavati ti pomoći kad ne želiš da uložiš minimum napora i sam.
Na kraju krajeva, prelistaj sve probleme koji su pratili taj plugin za prevod na wp sajtu i github-u pa vidi kako su drugi rješavali. Odjavljujem se.
Sve je jasno, problem je davno rješen. Dao si ok dokumentaciju i problem je solved od tog momenta. Čak i prije toga.
Samo velim da mi nije jasno što su autori codea htjeli postići stavljanjem i varijacije “continue” i “break” unutar istog switch statementa, kada obje naredbe imaju isto značenje na tom mjestu. Očito je da ni sami nisu znali.
A čak da su stavili i “continue 2”, u konkretnom komadu code-a se ništa drugačije nebi izvršavalo.
To je inače iz plugina: Customize Meta Widget
A warning koji baca PHP nakon updejta je:
Warning: Use of undefined constant replace_meta_widget - assumed ‘replace_meta_widget’ (this will throw an Error in a future version of PHP) in …/wp-content/plugins/customize-meta-widget/customize-meta-widget.php on line 21
Pa ako netko zna o čemu je riječ, bit ću zahvalan.
Ako me ne misli izjesti nakon što pomogne. …ma bit ću i tada zahvalan.
Nit sam ja radio te stranice…niti znam što je na njima. Samo ih re-hostam, a kako je moj host izbacio podrsku za php5 morao sam na sto brzi i bezbolniji nacin azurirat 50ak stranica. Nisam proucavao sto je na njima.