-
PHP变量处理之serialize
官方定义:
1 string serialize ( mixed
$value
)
serialize() 返回字符串,此字符串包含了表示 value 的字节流,可以存储于任何地方。这有利于存储或传递 PHP 的值,同时不丢失其类型和结构。 想要将已序列化的字符串变回 PHP 的值,可使用 unserialize()。serialize() 可处理除了 resource 之外的任何类型。甚至可以 serialize() 那些包含了指向其自身引用的数组。你正 serialize() 的数组/对象中的引用也将被存储。 当序列化对象时,PHP 将试图在序列动作之前调用该对象的成员函数 __sleep()。这样就允许对象在被序列化之前做任何清除操作。类似的,当使用 unserialize() 恢复对象时, 将调用 __wakeup() 成员函数。
对象的序列化
所有php里面的值都可以使用函数serialize()来返回一个包含字节流的字符串来表示。unserialize()函数能够重新把字符串变回php原来的值。 序列化一个对象将会保存对象的所有变量,但是不会保存对象的方法,只会保存类的名字。
为了能够unserialize()一个对象,这个对象的类必须已经定义过。如果序列化类A的一个对象,将会返回一个跟类A相关,而且包含了对象所有变量值的字符串。 如果要想在另外一个文件中解序列化一个对象,这个对象的类必须在解序列化之前定义,可以通过包含一个定义该类的文件或使用函数spl_autoload_register()来实现。
通过官方手册的介绍可以看出serialize()可以将出resource之外的任何类型序列化为字符串,以存储在变量或会话之中。
代码示例:
序列化数组:
1234 $arr
= [
'name'
=>
'Tony'
,
'age'
=>29,
'sex'
=>
'male'
];
$s
= serialize(
$arr
);
var_dump(
$s
);
var_dump(unserialize(
$s
));
输出结果:
#1 序列化后的字符串
string(64) "a:3:{s:4:"name";s:4:"Tony";s:3:"age";i:29;s:3:"sex";s:4:"male";}"
#2 对已序列化的字符串回复后的原对象
array(3) {
["name"]=>
string(4) "Tony"
["age"]=>
int(29)
["sex"]=>
string(4) "male"
}序列化对象
此处引用手册中的示例代码
12345678910111213141516171819202122232425262728293031 <?php
// classa.inc:
class
A {
public
$one
= 1;
public
function
show_one() {
echo
$this
->one;
}
}
// page1.php:
include
(
"classa.inc"
);
$a
=
new
A;
$s
= serialize(
$a
);
// 把变量$s保存起来以便文件page2.php能够读到
file_put_contents
(
'store'
,
$s
);
// page2.php:
// 要正确了解序列化,必须包含下面一个文件
include
(
"classa.inc"
);
$s
=
file_get_contents
(
'store'
);
$a
= unserialize(
$s
);
// 现在可以使用对象$a里面的函数 show_one()
$a
->show_one();
?>
在应用程序中序列化对象以便在之后使用,强烈推荐在整个应用程序都包含对象的类的定义。 不然有可能出现在解序列化对象的时候,没有找到该对象的类的定义,从而把没有方法的类__PHP_Incomplete_Class_Name作为该对象的类,导致返回一个没有用的对象。
所以在上面的例子中,当运行session_register("a"),把变量$a放在会话里之后,需要在每个页面都包含文件classa.inc,而不是只有文件page1.php和page2.php。
查看全部 -
先用$filename='文件路径' 读取文件。
再用$content=file_get_cintents($filename)将整个文件读取到一个字符串中。
最后输出$content。
查看全部 -
各种语言的正则表达式:
https://blog.csdn.net/QQ80583600/article/details/69062659
php的正则表达式
https://www.cnblogs.com/hellohell/p/5718319.html
查看全部 -
对于删除与更新操作,可以通过mysql_affected_rows函数来获取更新过的数据行数,如果数据没有变化,则结果为0。
查看全部 -
$pagesize == $n
$offset == $m
$page == $page
查看全部 -
mysql_query是查询数据
insert into user(name, age, class) values('王二', 19, '高三五班')" 是插入数据
查看全部 -
<?php
//连接数据库
mysql_connect('127.0.0.1', 'code1', '');
mysql_select_db('code1');
mysql_query("set names 'utf8'");
//已知的数据变量有
$name = '李四';
$age = 210;
$class = '高三一班';
//在这里进行数据查询
$sql = "insert into user(name, age, class)
values('$name', '$age', '$class')";
mysql_query($sql); //执行插入语句
$uid = mysql_insert_id();
echo $uid;
查看全部 -
在数据库建立连接以后就可以进行查询,采用mysql_query加sql语句的形式向数据库发送查询指令。
$res = mysql_query('select * from user limit 1');
对于查询类的语句会返回一个资源句柄(resource),可以通过该资源获取查询结果集中的数据。
$row = mysql_fetch_array($res); var_dump($row);
查看全部 -
mysql扩展进行数据库连接的方法:
$link = mysql_connect('mysql_host', 'mysql_user', 'mysql_password');
查看全部 -
一般情况下常说的LAMP架构指的是:Linux、Apache、Mysql、PHP
查看全部 -
异常抛出被用于在遇到未知错误,或者不符合预先设定的条件时,通知客户程序,以便进行其他相关处理,不至于使程序直接报错中断。
当代码中使用了try catch的时候,抛出的异常会在catch中捕获,否则会直接中断。
查看全部 -
删除某个session值可以使用PHP的unset函数,删除后就会从全局变量$_SESSION中去除,无法访问。
如果要删除所有的session,可以使用session_destroy函数销毁当前session,session_destroy会删除所有数据,但是session_id仍然存在。
值得注意的是,session_destroy并不会立即的销毁全局变量$_SESSION中的值,只有当下次再访问的时候,$_SESSION才为空,因此如果需要立即销毁$_SESSION,可以使用unset函数。
如果需要同时销毁cookie中的session_id,通常在用户退出的时候可能会用到,则还需要显式的调用setcookie方法删除session_id的cookie值
全部删除,且值为空
session_start(); $_SESSION['name'] = 'jobs'; $_SESSION['time'] = time(); unset($_SESSION); session_destroy(); var_dump($_SESSION); //此时已为空
查看全部 -
cookie将数据存储在客户端,建立起用户与服务器之间的联系,通常可以解决很多问题,但是只能储存4k,不太安全,且每次请求都会占用网络传输。
session是将用户会话存储再服务端,没有大小限制,session id也可以通过参数来实现,只要能将session id传递到服务端进行识别的机制都可以使用session。
查看全部 -
PHP中的重载指的是动态的创建属性与方法,是通过魔术方法来实现的。属性的重载通过__set,__get,__isset,__unset来分别实现对不存在属性的赋值、读取、判断属性是否设置、销毁属性。
查看全部 -
extends继承
查看全部
举报