Zefirs Posted November 22, 2013 Report Share Posted November 22, 2013 Pēdējo dienu cīnījos ar problēmu, ka FuelPHP ietvarā netika atgrieztas vērtības/properties orm modelim. Tā kā viņu forumā paraudāt uz sitiena ir jaunpienācējiem aizliegts, tad savu žulti nāku šeit izgāzt; Problēma slēpās kaut kur cache mehānismā, rokot dziļāk atdūros pret dīvainu problēmu, kuru nespēju izskaidrot vai arī es kaut ko palaižu garām. Tātad isset WTF : Klase ar problemātisko daļu - https://github.com/fuel/orm/blob/1.7/master/classes/query.php#L1094 foreach ($select as $s) { $f = substr($s[0], strpos($s[0], '.') + 1); if ( ! isset($obj->{$f})) { $obj->{$f} = $row[$s[1]]; } } $select satur laukus (piem, "t0.xxxx"), kurus atlasīja datubāzē. Tālāk tiek pārbaudīts vai $obj objekts jau satur šādu vērtību ar if ( ! isset($obj->{$f})), ja nē $obj tiek uzstādīta no db ielasītā vērtība. Problēma ir šeit if ( ! isset($obj->{$f})) $obj->{$f} dažos gadījumos vērtība ir NULL, bet isset atgriež true, tādēļ arī netiek piešķirtas trūkstošās vērtības.Pirms isset pārbaudes izvadīju obj propertija vērtības ar var_dampu šādi: foreach ($select as $s) { $f = substr($s[0], strpos($s[0], '.') + 1); var_dump($obj->{$f}); if ( ! isset($obj->{$f})) { $obj->{$f} = $row[$s[1]]; } } Rezultāts:NULLNULLstring(7) "English"string(3) "eng"NULLstring(1) "1"Ja pievienoju is_null pārbaudi viss strādā ideāli. Kādēļ is_null nostrādā, bet isset nē? if ( ! isset($obj->{$f}) || is_null($obj->{$f}) ) Quote Link to comment Share on other sites More sharing options...
jurchiks Posted November 22, 2013 Report Share Posted November 22, 2013 (edited) Vai tev kaut kur logos parādās warning, ka tu centies piekļūt neeksistējošam variablim (konkrēti no var_dump())? Ja nē, tad gluži vienkārši $obj->{$f} ir uzsetots ar vērtību null. Vēl iespējams, ka tur tiek izmantots magic __get($key), kas returno null, ja key neeksistē. Edited November 22, 2013 by jurchiks Quote Link to comment Share on other sites More sharing options...
Zefirs Posted November 22, 2013 Author Report Share Posted November 22, 2013 (edited) jurchik: isset() can be applied to unknown variables, but is_null() only to declared variables.Read more: http://techtalk.virendrachandak.com/php-isset-vs-empty-vs-is_null/#ixzz2lNBmWDYY Follow us: @virendrachandak on Twitter Izrādās overloaded __isset . Turpinu rakt... Edited November 22, 2013 by Zefirs Quote Link to comment Share on other sites More sharing options...
Pats Toms Posted November 22, 2013 Report Share Posted November 22, 2013 Piekāp #fuelphp Freenodā Quote Link to comment Share on other sites More sharing options...
marrtins Posted November 22, 2013 Report Share Posted November 22, 2013 Nu tad skaties, ko jams tur overloado? Varbūt tur tā loģika ir tāda, ka lauks no datubāzes vienmēr ir "set" kaut vai uz NULL. 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.