[PHP] Object wil niet serializen

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • coenbijlsma
  • Registratie: Augustus 2004
  • Niet online
Ondanks de overdaad aan topics over PHP en serializen ben ik toch tegen een probleem aangelopen dat ik niet kon vinden tijdens het zoeken op GoT of op php.net.

Mijn probleem is het volgende:
Ik ben bezig een EJB-achtig framework aan het schrijven in PHP (5.2.1). Onderdeel daarvan is een class MySQL, en die wil ik serializeren. Als ik het object aangemaakt heb ziet de print_r er bijvoorbeeld zo uit:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
MySQL Object
(
    [v_connection:private] => 
    [v_host:private] => host
    [v_username:private] => user
    [v_password:private] => pwd
    [v_dbname:private] => 
    [v_port:private] => 3306
    [v_socket:private] => 
    [v_log:private] => Filelog Object
        (
            [v_fileloc:private] => /opt/lampp/htdocs/db_framework/log
            [v_log_texts:private] => Array
                (
                )

            [v_overwrite:private] => 1
            [v_add_datetime:private] => 1
        )

    [v_connect_on_wakeup:private] => 
)


Maar als ik vervolgens de output van serialize() afdruk is dit het resultaat:
PHP:
1
2
3
4
// Even aannemen dat de variabele $mysql bestaat
print_r(serialize($mysql));

//OUTPUT is dan: N;


Ik weet dat je php buit-in objecten niet kunt serializen dus die haal ik er al uit (zoals het mysqli-object), maar verder zie ik geen problemen.

Ik heb het trouwens ook nog even met een ander object geprobeerd, en dat werkt wel gewoon:
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
class myclass {
        
        private $priv1 = "val1",
        $myclassvar2 = "val2";
        public $pub = "val3";

        public function __construct(){
                $this->priv1 = "val1";
                $this->myclassvar2 = "val2";
                $this->pub = "val3";
        }
}

$inst = new myclass ();
print_r($inst);

// Levert deze output op:
// O:7:"myclass":3:{s:14:"�myclass�priv1";s:4:"val1";s:20:"�myclass�myclassvar2";s:4:"val2";s:3:"pub";s:4:"val3";}

Heeft iemand een idee hoe het kan dat het MySQL-object niet wil serializen?

[ Voor 0% gewijzigd door coenbijlsma op 06-04-2007 18:00 . Reden: PHP versie vergeten... ]


Acties:
  • 0 Henk 'm!

  • coenbijlsma
  • Registratie: Augustus 2004
  • Niet online
Aiaiai... toch niet goed gelezen (ik dacht dat het voor mij niet opging) |:(

Het blijkt dat de methode __sleep() een bepaald return-type verwacht, en dat het serializen niet werkt zonder dit return-type. Staat trouwens niet in de 'officiele' documentatie van serialize(), maar in een post van gebruiker Neil Green een stukje naar beneden.

Oplossing in code (vers uit m'n MySQL class):
PHP:
1
2
3
4
5
6
public function __sleep(){
    if($this->v_connection !== false){
        $this->v_connect_on_wakeup = true;
    }
    return array_keys( get_object_vars( $this ) );
}

Acties:
  • 0 Henk 'm!

  • tech-no-logical
  • Registratie: December 2000
  • Laatst online: 17-09 22:52
dat staat niet bij serialize idd, maar hier :

http://nl2.php.net/manual/en/language.oop5.magic.php