Jump to content
php.lv forumi

Laravel programmētāji


ViktorsN

Recommended Posts

  • Replies 303
  • Created
  • Last Reply

Top Posters In This Topic

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...

Link to comment
Share on other sites

>No frontenda tev tāpat nāk stringi, arī skaitļiem. Tad ko, tu katru skaitli salīdzini ar (int)$_POST['id'] === $id ?

$request->getData->getInt('foo'/*, $default = 0*/);

 

>Vai arī tu noselektē no db datus, un arī vienmēr casto tos uz int pirms salīdzināšanas?

Ja izmanto mysqlnd un PDO::ATTR_EMULATE_PREPARES => false, tad int arī atgriežas kā int, nevis string.

 

>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.

Kas tas par stulbu jautājumu? Tikko taču teicu, ka vienmēr salīdzinu ar ===.

 

>nav jādrukā vienkārši lieki simboli...

Ja tie liekie simboli nozīmē, ka es 100% zinu, kā darbojas mans kods, nevis paļaujos uz "PHP magic", tad jā, es drukāšu tos "liekos" simbolus.

Link to comment
Share on other sites

> Vienkārši, ja tu salīdzini ar ===, tad rezultāts ir daudz paredzamāks

 

This.

 

> No frontenda tev tāpat nāk stringi, arī skaitļiem. Tad ko, tu katru skaitli salīdzini ar (int)$_POST['id'] === $id ?

 

Kad dati nāk no frontenda, mēs viņus padodam formas klasei, kas viņus novalidē un atgriež jau normālos tipos. Lielākā daļa koda jau stradā ar pareiziem tipiem, jo pareizais tips tiek uzlikts ASAP.

 

> Vai arī tu noselektē no db datus, un arī vienmēr casto tos uz int pirms salīdzināšanas?

 

Datubāzē arī datiem ir pareizi tipi. Pēc selecta es dabūju jau visu kā nākas.

 

> 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)?

 

Bieži vien uzraksu “liekos simbolus“ for clarity:

 

> if x is None:

 

Bet nu normālā gadījumā tas būtu expcetion, kuru uzreiz tu arī nohandlēju

 

> nevis paļaujos uz "PHP magic", tad jā, es drukāšu tos "liekos" simbolus.

 

This. Manā gadījumā tas ir JavaScript, bet no thanks, negribu paļauties, ka JavaScript castos kko — cik bieži nav redzēts kas notiek, kad tipi nav vienādi un JavaScript mēģina darīt kko “sensible“.

Link to comment
Share on other sites

Ja tie liekie simboli nozīmē, ka es 100% zinu, kā darbojas mans kods, nevis paļaujos uz "PHP magic", tad jā, es drukāšu tos "liekos" simbolus.

Tas ir kā? Tu esi pats pārlasījis PHP binary mašīnkodu un pats salodējis mikroshēmas, uz kā tas izpildās?

 

Ja nē, tad tu tāpat neko nezini, attiecīgi - plika diršana.

Link to comment
Share on other sites

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.

Varētu par šo sīkāk? Kāds ir tas gadījums, kad DB row objekts var tikt castots uz boolean false, ja eksistē tas ieraksts?

Edited by Mr.Key
Link to comment
Share on other sites

Varētu par šo sīkāk? Kāds ir tas gadījums, kad DB row objekts var tikt castots uz boolean false, ja eksistē tas ieraksts?

 

nē, es tieši par to, ka ja neeksistē.

 

Consider this: 

$profile = UserProfile::find($id); // atgriež null neeksistējoša ieraksta gadījumā

 

Sanāk, ka === lietotājiem šajā gadījumā jāsalīdzina šādi, lai pārbaudītu vai ir tieši tāds tips:

 

if($user instanceof UserProfile)

 

Lietot !== null nedrīkst, jo tas negarantē konkrētu tipu, bet gan tikai izslēdz null.

 

Es sāku, ka pilnīgi bezjēdzīgi visur piekopt ===, tīri lai "drošāk justos".

Link to comment
Share on other sites

Lietot !== null nedrīkst, jo tas negarantē konkrētu tipu, bet gan tikai izslēdz null.

 

Es sāku, ka pilnīgi bezjēdzīgi visur piekopt ===, tīri lai "drošāk justos".

Kā tas ir jāsaprot - negarantē? Vai ir pierādīti gadījumi, kad atgriež ko citu?

Link to comment
Share on other sites

Skaidrs, piekrītu.

 

Man gan liekas, ka stilistiski labāk ir likt atstarpi pirms iekavas, kas seko valodas konstrukcijai. Vieglāk acīm, kad jāatšķir no funkcijām.

 

Lietoju PSR1/2standartu auto formatēšanu, pats nedomāju par atstarpēm, IDE pati saliek, kur vajag.

 

Kā tas ir jāsaprot - negarantē? Vai ir pierādīti gadījumi, kad atgriež ko citu?

 

Nu figviņzin, tu taču kodē "strikti", un koda atkarības var mainīties, tāpēc tev taču jāpārbauda pret tipu, kuru sagaidi, nevis to, kuram nevajadzētu būt... Sāk jau pretrunas parādīties :)

Link to comment
Share on other sites

Nu pagaidi, ja tu raksti metodi, kura atgriež konkrētās klases instanci vai null, tad tur nekas cits nedrīkst būt. Tur pēc būtības nekas nedrīkst mainīties, un ja mainītos, tad uzreiz visa sistēma aizietu pa pieskari anyway.

Strikti kodēt nenozīmē visur izmantot instenceof, nesāc te tagad murgot.

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...

×
×
  • Create New...