Archief - PHP: serialize

Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.

Radiance

Legacy Member
Hi all,

Ik heb iets vreemd voor met serialize.
Ik heb deze User klasse :
PHP:
<?php

class Radiance_User
{
	private $db, $select, $table;
	private $username, $firstName, $lastName;
	
	public function __construct($username = false)
	{
		$this->db = Zend::registry('db');
		$this->select = Zend::registry('select');
		$this->table = 'Users';
		if ($username)
		{
			$this->username = $username;
		}
	}
	
	public function authenticate($password)
	{
		$this->select->from($this->table, '*');
		$this->select->where('username = ?', $this->username);
		
		$result = $this->db->fetchAll($this->select);
		if(count($result) == 1)
		{
			if($result[0]['passphrase'] == sha1($password))
			{
				$this->firstName = $result[0]['firstname'];
				$this->lastName = $result[0]['lastname'];
				return true;
			}
		}
		return false;
	}
	
	public function getUserName()
	{
		return $this->userName;
	}
	
	public function __sleep()
	{
		unset($this->db);
		unset($this->select);
	}
	
	public function __wakeup()
	{
		$this->db = Zend::registry('db');
		$this->select = Zend::registry('select');
	}
}  
?>

Maar als ik er dit mee doe:
PHP:
$adminUser = new Radiance_User($filterPost->getAlnum('username'));
die(serialize($adminUser));
krijg ik als output enkel "N;", ik vind er maar betrekkelijk weinig info over, ergens gelezen dat je dit probleem hebt wanneer je zelf een __call() methode hebt, maar dat is dus niet.
Zonder de __sleep() krijg ik overigens een error omdat je geen PDO resources kunt serializen.

Iemand die de oorzaak weet?

killgore

Legacy Member
ehm, probeer deze sleep eens:
PHP:
function __sleep()
{
    return array("table","username","firstName","lastName");
}
eventueel met uw unset, maar ik weet niet of die echt nodig is in dit geval (tenzij de unset voor een close zorgt, ik ben niet echt gewend aan pdo in registry :s).

Uw wakeup blijft normaal etzelfde :).

+als ge een destruct hebt: daar zit (of zat, weet niet of het opgelost is in 5.1) ergens een fout in, bij sommige functies roept die de destruct voor de sleep aan, bij andere de sleep voor de destruct.

Radiance

Legacy Member
Yep dat lost het op, thanks.
De PHP manual is daar wel heel sumier over (lees: er staat ni eens in dat je dat dan zelf moet return'en).

In de comments deze gevonden
PHP:
	public function __sleep()
	{
		return( array_keys( get_object_vars( &$this ) ) );
	}

Nu vraag k mij idd ook wel af of unset(); hier enkel de lokale referentie naar de DB / select verwijderd of de connectie sluit.
Op de moment maakt het weinig uit, maar later kan dat evt. wel anders zijn.
edit : enkel de referentie

killgore

Legacy Member
als je niet zelf returned gaat hij zelf een selectie maken, maar op basis van wat hij dat doet weet ik niet, de manual is idd zeer beperkt erover.
Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.
Terug
Bovenaan