Hello,

Bad idea, slow, really.. But it allows to create,modify persistent
variables, etc...
Any comments, suggestions?

Alexander

----------------------------------------------------------------------------
-----
use test;
CREATE TABLE `tbl` (
 'id' mediumint(8) unsigned NOT NULL,
  'version' mediumint(8) unsigned default '1',
  'header' varchar(255),
  'content' text,
  PRIMARY KEY  ('id')
);

INSERT INTO tbl VALUES("1","1","test header","test content");
----------------------------------------------------------------------------
-----


#!/usr/local/bin/php -q
<?php
$DB =
array('sock'=>':/tmp/mysql.sock','user'=>'root','pass'=>'?????','database'=>
'test');
$DB['link'] = mysql_connect($sock,$DB['user'],$DB['pass']);
mysql_select_db($DB[database]);

class mpersist
{
    function mpersist($id)
    {
 $this->id = $id;
 $this->version = -1;
 $this->classname = get_class($this);
 $this->reload();
    }

    function reload()
    {
 echo "::reload $this->classname($this->id,$this->version)\n";
 $rt = mysql_query("select * from $this->classname where id=$this->id");
 $data = mysql_fetch_assoc($rt);
 $this->version = $data[version];
 $this->data = $data;
    }

    function __get($prop_name, &$prop_value)
    {
 if($prop_name=='id' or $prop_name=='version' or $prop_name=='classname' or
$prop_name=='data')
 {
     $prop_value = $this->$prop_name;
     return true;
 }

 $rt = mysql_query("select version from $this->classname where
id=$this->id");
 $ver = mysql_result($rt,0);
 if($ver != $this->version) $this->reload();
 $prop_value = $this->data[$prop_name];
 return true;
    }
    function __set($prop_name, $prop_value)
    {
 if($prop_name=='id' or $prop_name=='version' or $prop_name=='classname' or
$prop_name=='data')
 {
     $this->$prop_name = $prop_value;
     return true;
 }
 $val = mysql_escape_string($prop_value);
 $rt = mysql_query("update $this->classname set
$prop_name='$val',version=version + 1 where id=$this->id and version =
$this->version");
 if(mysql_affected_rows() != 1)
 {
     echo "::version too old or something wrong\n";
     return false;
 }
 else
 {
     $this->data[$prop_name] = $prop_value;
     $this->version++;
 }
 return true;
    }
}
class tbl extends mpersist{};
overload('tbl');

/*   test1 */
/* try to update tbl "update tbl set header='new header', version =
version+1 where id=1" from another window or using graphical client :)
during execution...*/
$a = new tbl(1);
for($i=0;$i<60;++$i)
{
    echo "\n--". date("H:i:s") . "--\n";
    echo $a->header;
    sleep(1);
}

/*   test2 */
/* try to select from tbl "select * from tbl where id=1" from another window
or using graphical client :)  during execution...*/
for($i=0;$i<60;++$i)
{
    echo "\n--". date("H:i:s") . "--\n";
    echo $a->header = "$i iteration";
    sleep(1);
}
?>




-- 
PHP Development Mailing List <http://www.php.net/>
To unsubscribe, visit: http://www.php.net/unsub.php

Reply via email to