PHP object serialize

Törjön le a keze annak az idiótának, aki kitalálta, hogy a mocskos serialize() függvénynek oda kelljen basznia egy-egy tetves 0x00 -t az osztály neve elé-mögé. Tudnám alkalmazni rá pontscho IRC-n említett módszerét (villanypózna anális integrálása)...

(Konkrét scenario: serializált objektum mentése pg_escape_string() után adatbázisba.)

Hozzászólások

Én a minap jöttem rá, hogy az empty() sem az, amire gondol az ember.

if(empty(trim($some_string)) do_something();

Ez parse error. Az empty() nem egy függvény, hanem egy nyelvi elem, ami egy változót vár (szóval az

empty('');

is parse error).

Az empty() ugyanis kb ezzel egyenlő:

!(isset($var) && (bool)$var)

De ez félrevezető.

$a = '0';
var_dump(empty($a), empty($b));

Ez két TRUE lesz, pedig az $a az egy karakter hosszú sztring, de a boolean konverzió miatt FALSE lesz belőle.

Nem intiutív. Ilyen esetben érdemes inkább isset()-et használni (ha nem vagyunk bizosak benne, hogy az adott valami létezik). Vagy rendesen exception-t dobna...

Valóban, itt alapvetően a

(bool)"0"===false

a félrevezető (bár az empty()-t is megcsinálhatták volna úgy, hogy "0"-ra true-t adjon), ez talán onnan jön, hogy azt akarták, hogy

(bool)"0"

ne különbözzön

(bool)(int)"0"

-tól. Szóval az empty() nem jó string ellenőrzésre. (Mondjuk nem nagyon tudom elképzelni, hogy mikor kellene azt ellenőrizni, hogy egy változó vagy nem létezik, vagy üres-e, olyan kódban, ahol elkerüljük az E_NOTICE-okat, tehát nem használjuk ki, hogy

(bool)(nemlétező tömbelem)===false

.)

Hülye kérdés, de str_replace() -vel nem tudod megoldani?
Bár ez csúnya workaround lenne...pláne ha ez a string szerepel az object -ben máshol is...:)

"-Pedig vegetariánus vagyok; csak növényevő állatokat fogyasztok!"
azenoldalamponthu

-1. Nem fér bele. Szvsz.

--

Egyébként php.net-eseknek az az érvük, hogy sehol nem ígérték azt, hogy az binary safe lesz, használjak valami encodingot rá.. Csak azt nem értem, hogy miért kellett pont \0-t belekeverni, mikor semmi egyébhez nem használ nem ascii karaktert...

----------------
Lvl86 Troll

Na most itt az alapvető probléma, hogy mi a retkes fenét keres egy \0 egy string kellős közepén? A probléma gondolom abból adódik, hogy a PHP eltárolja az adott string hosszát, csakhogy utána a PQescapeString() egy const char * -t kér, ami viszont keményen megáll a \0 -nál.

Nevetséges.

----------------
Lvl86 Troll