Vineri, Alin D. a provocat echipa INNOBYTE să rezolve următoarea problemă PHP:
if (CEVA) {
echo ‘Hello’;
} else {
echo ‘ world’;
}
Provocarea PHP a constat în a scrie o secvență de cod ce va înlocui CEVA astfel încât să afișeze Hello World.
La sfârșitul zilei, Alin a tras linia și ne-a arătat soluțiile primite:
1. if (!print(‘Hello’)) { (cei mai mulți s-au gandit la solutia aceasta)
2. if (((print(‘ Hello’)) && 0)) {
3. printf(“Hello “)==”4”
4. !printf(“Hello”)
Au fost și câteva soluții deosebite, precum:
5. php -r ‘if (eval(“echo “Hello”;”)){ echo “Hello”;} else {echo ” world”;}’
6. if(($a = function(){echo ‘hello ‘; return false;}) && $a() === true)
7. if (die(‘Hello world’)) {
8. if (printf(‘Hello world<div style=”display:none”>’)) { (care nu merge din CLI sau IE)
9. php -r “if(print(“Hello worldr”)){echo’Hello’;}else{echo’ world’;} echo PHP_EOL;”
10. php -r “if(print(‘Hello world’)){} __halt_compiler(); ){echo’Hello’;}else{echo’ world’;}”
11. if(eval(“echo ‘hello ‘; return false;”))
Ni s-au părut foarte tari soluțiile găsite (și cât de multe s-au găsit!), așa că am dorit să vi le arătăm și vouă.
Voi cum ați fi rezolvat această problemă?
Varianta #4 mi se pare cea mai corecta (d.p.d.v. semantic), solutia #1 fiind fortata. De mers (sol. #1), merge, insa print nu-i chiar o functie. Variantele cu exit/__halt_compiler nu prea-s ok, functioneaza daca testezi doar acea bucata de cod, daca s-ar pune codul (sa zicem ca ar fi un modul) intr-o aplicatie mai mare, ar fi inacceptabil, oprind executia aplicatiei
Continuand:
12. if(ob_start(function($text,$phase){return ($phase & PHP_OUTPUT_HANDLER_START)?”{$text} world”:$text;})) …
Emil, interesanta rezolvare. Foarte tare!
interesant subiect (chiar daca l-am gasit cu intarziere);
totusi, (presupunand ca ghilimelele sunt de cele corecte si codul se interpreteaza).. in care varianta se afiseaza “World” (cu W capital) asa ca in cerinta?