Kavacky Posted June 29, 2016 Report Share Posted June 29, 2016 Special case, kas izmanto fīču, ka iespējama arī identitātes pārbaudīšana. Tas nenozīmē, ka identitāte jālieto visos pārējos 99.999% gadījumu. Quote Link to comment Share on other sites More sharing options...
jurchiks Posted June 29, 2016 Report Share Posted June 29, 2016 Labi - funkcijas/metodes, kas atgriež NULL objekta vietā, ja kaut kas nav pareizi, bet exception īsti nav jēgas mest. Piemēram, kaut kādi optional dati, kas var būt un var nebūt. Optional parametri ar default value NULL/FALSE. Un tās special case funkcijas PHP nebūt nav tikai 0.001% gadījumu, ja vien tu neesi visu PHP API pārrakstījis pa savam. Quote Link to comment Share on other sites More sharing options...
codez Posted June 29, 2016 Report Share Posted June 29, 2016 (edited) Scalā ir tāds skaists tips kā Option[T], kurš implementē divus apakštipus Some[T] un None. Un, ja tev ir iespējamība, ka var atgriezt kādu objektu, bet var arī neatgriezt, tad raksta funkciju: def getSomeObject: Option[MyObject] = { ... } Un pēc funkcijas definīcijas ir viennozīmīgi skaidrs, ka funkcija varbūt atgriezīs objektu, bet varbūt None. Attiecīgi tālāk var veikt dekompozīciju un attiecīgi rīkoties abos gadījumos: getSomeObject match { case Some(object) => println(object) case None => println("Object not found") } Vai, ja objekta neatgriezšanas gadījumā ir kāds defaultais objekts, tad: println( getSomeObject.getOrElse(defaultObject) ) Edited June 29, 2016 by codez Quote Link to comment Share on other sites More sharing options...
jurchiks Posted June 29, 2016 Report Share Posted June 29, 2016 (edited) Bet tā ir Scala. PHP nav pat generics. Edited June 29, 2016 by jurchiks Quote Link to comment Share on other sites More sharing options...
briedis Posted June 29, 2016 Report Share Posted June 29, 2016 Bet tā ir Scala. PHP nav pat generics. getSomeObject() ?: $defaultObject same shit Parasti jau visām sesijas, cookie, utt access metodēm ir otrs params defaultā vērtība. Quote Link to comment Share on other sites More sharing options...
jurchiks Posted June 29, 2016 Report Share Posted June 29, 2016 Un tu pret to defaulto vērtību nekad nepārbaudi? Quote Link to comment Share on other sites More sharing options...
Mr.Key Posted June 29, 2016 Report Share Posted June 29, 2016 (edited) if ($foo->hasSomething('boo')) { $value = $foo->getSomething('boo'[, $default]); } Edited June 29, 2016 by Mr.Key Quote Link to comment Share on other sites More sharing options...
jurchiks Posted June 30, 2016 Report Share Posted June 30, 2016 Not applicable for data retrieved using db requests. Don't wanna do 2 queries. Quote Link to comment Share on other sites More sharing options...
F3llony Posted June 30, 2016 Report Share Posted June 30, 2016 Lietot double equality izņemot dažus ļoti specifiskus gadījumus ir pilnīgs un absolūts cirvisms visplašākajā šī vārda nozīmē. Tas, ka valoda ļauj darboties type free, nenozīmē, ka viss arī ir jāraksta type free. 0 ir integer 0, nevis false, "" ir emptystring, nevis false un null ir null, nevis false. Tā pat, null lietošana ir absolūts ļaunums no kura jāizvairas visos iespējamos gadījumos - null nav ne jāatgriež ne jāpieņem interfeisos, izņemot varbūt darbojoties ar RDBMS kur null ir "nekāda vērtība" un operācija "dzēst lauku" nepastāv. Quote Link to comment Share on other sites More sharing options...
Kavacky Posted June 30, 2016 Report Share Posted June 30, 2016 Un tas ir cirvisms, jo? Kurš var pastāstīt, cik reizes viņam dzīvē gadījušās ziepes "==" dēļ, jo nav ticis izmantots "==="? Es precīzi neatceros, bet tiecas uz 0, toties lietošanas ērtuma ieguvums ir pamatīgs. Quote Link to comment Share on other sites More sharing options...
jurchiks Posted June 30, 2016 Report Share Posted June 30, 2016 Es pats esmu uz tiem grābekļiem karjeras sākumā uzkāpis, un esmu redzējis pieredzējušus programmētājus pieļaujam to pašu kļūdu ("strpos($a, $b) == false" - šādu lietu esmu pārsteidzoši bieži redzējis). Quote Link to comment Share on other sites More sharing options...
Kavacky Posted June 30, 2016 Report Share Posted June 30, 2016 Laikam par maz esmu uzturējies cirvju ielokā. Quote Link to comment Share on other sites More sharing options...
F3llony Posted June 30, 2016 Report Share Posted June 30, 2016 Un tas ir cirvisms, jo? Kurš var pastāstīt, cik reizes viņam dzīvē gadījušās ziepes "==" dēļ, jo nav ticis izmantots "==="? Es precīzi neatceros, bet tiecas uz 0, toties lietošanas ērtuma ieguvums ir pamatīgs. xD Good luck, then. https://www.owasp.org/images/6/6b/PHPMagicTricks-TypeJuggling.pdf http://securityaffairs.co/wordpress/36732/hacking/php-hash-comparison-flaw.html https://www.alertlogic.com/blog/writing-exploits-for-exotic-bug-classes-php-type-juggling/ https://labs.mwrinfosecurity.com/blog/wordpress-auth-cookie-forgery/ ... and many, MANY many more. Quote Link to comment Share on other sites More sharing options...
jurchiks Posted June 30, 2016 Report Share Posted June 30, 2016 Vienkārši, ja tu salīdzini ar ===, tad rezultāts ir daudz paredzamāks, nekā ar ==, un ļoti bieži pat nepārprotams, kā, piemēram, "$x === null". Quote Link to comment Share on other sites More sharing options...
briedis Posted June 30, 2016 Report Share Posted June 30, 2016 Vienkārši, ja tu salīdzini ar ===, tad rezultāts ir daudz paredzamāks, nekā ar ==, un ļoti bieži pat nepārprotams, kā, piemēram, "$x === null". No frontenda tev tāpat nāk stringi, arī skaitļiem. Tad ko, tu katru skaitli salīdzini ar (int)$_POST['id'] === $id ? Vai arī tu noselektē no db datus, un arī vienmēr casto tos uz int pirms salīdzināšanas? Kad tu atlasi ActiveRecord instanci no db, un tur var būt divi varianti rezultātam - objekts vai null, ja neeskistē ieraksts. Tad if`ā tu arī salīdzini if($obj === null) vai tomēr if($obj)? Es ceru, ka === null, jo if($obj) tomēr casto uz boolean, kas basically ir double equals. Tieši šādos keisos == ir pats labākais, ka nav jādrukā vienkārši lieki simboli... Quote Link to comment Share on other sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.