何金民

12 个有效的提高编程技能的方法

1. 永远不要停止学习和阅读
阅读 书籍,而不只是网站
阅读 只为自我提升,而不是为了下一个项目
阅读 提升你的基础,而不只是最新技术

2. 跟比你聪明的人一起工作
跟比你更聪明的人或者是更有经验的人一起工作,可以让你快速提升

3. 变成一个全才
不要过于钻牛角尖,这可能会让你停滞不前和伤害你的就业前景。

4. 阅读并记录别人的代码
其实写代码比阅读并理解别人的代码要容易的多。

5. 在实际的项目中获取编程经验
只有在真实的项目中,各种压力下、真实善变的客户、不断变化的需求下,才能不断提升你的技能。

6. 教授别人编程技巧
这个可以强迫自己去理解不同水平的人的情况,而且你必须耐心的帮他们解释清楚,这对你本身而言也是一种提高。

7. 每年学习一种新的编程语言
用一年时间来学习一种新的编程语言,已经足够让你对它的基础了解透彻,同时你可以理解不同语言之间的风格。

8. 每年完成一个有意思的项目
每年做一个有意思的项目,不一定有什么用途,但一定是很有意思,让你非常有兴趣把它做得很棒。

9. 学习汇编语言
学习像汇编这样的低级语言可以让你了解计算机是如何工作的。

10. 与你的应用的客户交流获取信息
与最终用户交流可以知道他们的想法,他们是如何使用软件的,最终用户多数不是开发者,他们看到的是软件是一件神奇的工作,而你看到的软件是一套合乎逻辑的步骤。

11. 锻炼身体
身体是革命的本钱,只有好身体才能有好的工作、学习状态。

12. 练习快速打字
快速的键盘输入可以让编程工作更加高效。

[原于转载]

一个支持中文字符串截取的方法。

function subString_UTF8($str, $start, $lenth)
{
$len = strlen($str);
$r = array();
$n = 0;
$m = 0;
for($i = 0; $i < $len; $i++) {
$x = substr($str, $i, 1);
$a = base_convert(ord($x), 10, 2);
$a = substr(’00000000′.$a, -8);
if ($n < $start){
if (substr($a, 0, 1) == 0) {
}elseif (substr($a, 0, 3) == 110) {
$i += 1;
}elseif (substr($a, 0, 4) == 1110) {
$i += 2;
}
$n++;
}else{
if (substr($a, 0, 1) == 0) {
$r[ ] = substr($str, $i, 1);
}elseif (substr($a, 0, 3) == 110) {
$r[ ] = substr($str, $i, 2);
$i += 1;
}elseif (substr($a, 0, 4) == 1110) {
$r[ ] = substr($str, $i, 3);
$i += 2;
}else{
$r[ ] = ”;
}
if (++$m >= $lenth){
break;
}
}
}
$r = implode($r);//格式化数组;
return $r;
} // End subString_UTF8;

 

//测试代码:
$t = implode(subString_UTF8(‘这是测试一下中文字符串的截取!’,0,10));

百度贴吧刷屏刷楼刷回复代码

贴吧刷屏刷楼刷回复代码如下

javascript:var c=rich_postor._getData();c.content='要刷的内容';for(var i=1;i<=12;i++){PostHandler.post(rich_postor._option.url,c,function(I){rich_postor.showAddResult(I)},function(I){});};void 0

使用方法:进入某个贴吧,点击进入一个帖子,在浏览器地址栏粘贴以上代码,将“要刷的内容”替换为你要发表的信息,然后enter回车

注意:本代码可以一次刷12楼,超过12次会被度娘提示歇歇再发,如果你不是该吧的会员,在需要输入验证码的情况下,本代码只能回复一条,使用本代码,有可能会被鹳狸猿盯上关小黑屋,所以请酌情使用,度娘不好惹,刷屏刷楼刷回复需谨慎

赠送一段自己改造的代码,很好玩的,跟上面是同样的运行方法:

javascript:var c=rich_postor._getData();for(var i=1;i<=12;i++){c.content=(i+2)+'楼烧饼,跟我抢'+(i+1)+'楼'; PostHandler.post(rich_postor._option.url,c,function(I){rich_postor.showAddResult(I)},function(I){});};void 0

想定制代码,请在下方留言

基于jquery的图片延迟载入插件(high.lazyload.js)

这是一个基于jquery图片延迟载入,参考了,http://www.appelsiini.net/projects/lazyload,精简了代码,使代码更清晰。 使用方法: 1.首先使所有输出到前端的<img /> 标签的“src”属性改为“_src”(可以自己定义,需要配置), 防止img标签一开始就加载图片 2.在页面底部

<script type="text/javascript">

      $(function(){ $('img').lazyload(); })

</script>

3. 配置参数

{
     original        : '_src',       //保存img的图片地址的属性
     placeholder  : undefined, //图片载入中图标,即图片未载入时图片的占位符
     threshold     : 0,      //未载入的图片距当前视窗的距离多少像素值时开始加载图片
     effect           : 'fadeIn',   //图片显示效果
     effectspeed  : '300'        //图片显示效果的速度
}

4.例如:$(‘img’).lazyload({placeholder:’http://caitupian.com/public/img/images/loading.gif’}); 5.下载地址: 源代码:high.lazyload.js 压缩版:high.lazyload.min.js 如有bug,欢迎指出。。。

jquery imageshown

/******************************************

Update to v1.2,finished build command

@license: This imageShown jQuery plug-in is dual licensed under the MIT and GPL licenses.

******************************************/

Demo

How to use:
$(‘elem’).imageShown({‘options’});
setter:
$(‘elem’).imageShown(‘option’,{‘options’});
$(‘elem’).imageShown(‘option’,'option’,'value’);
getter:
var option = $(‘elem’).imageShown(‘option’,'option name’);
$(‘elem’).imageShown(‘option’,{‘options’});

default options :

 id: null, //used for getter, you needn't set this. navSpace: 47, pWidth: 0 , pHeight:0 , navNum: 4, navPlace: null, autoPlay: true, autoTime: 4000, events: 'mouseenter', tbgAnimate: true, tbgSpeed: 'fast', addtional:false, step: 1, scrollSpeed:'fast', opacity:0.6, data: null, loop: true, player: true, animate: 'fade',//left,right,top,bottom,fade,none //deepNav: false, showTips: true, tipsAnimate: 'fade',//fade,slide selected: 1, callback: null, preload: true, target: '_blank', pSpeed:500, pType: false, tContent:'image',//num,none,image,content listPlace:null, tipsBtn:false, loadClass: 'img-player-loading', pContent:'image 

zend studio常见问题解答

1.zend studio 9可以破解吗?
可以的,具体破解步骤查看:http://www.geekso.com/ZendStudio9-key/
2.如何将zend studio 9的默认GBK编码设置为其它编码,例如UTF-8?
选 择window菜单->Preferences->General->Workspace,在界面当中找到“Text file encoding” 选中Other,在下拉列表中选择UTF-8就可以了。这样所有的建立的项目将使用utf-8的编码。如果想某个项目使用其它编码,选中项目右键点击,在 菜单中选择Preferences,弹出窗口左侧选择“Resource”,在右侧当中找到“Text file encoding” 选中Other,在下拉列表中选择你要的编码就可以了。
3.为什么我创建的项目会自动生成一个index.php文件?
当你新建项目时选择“Local PHP Project”就会产生index.php文件。所以要想不产生index.php文件,新建项目时选择PHP Project from Exiting Directoryt。
4.Zend Studio写代码不能自动提示了?
具体解决方法点击查看:http://www.geekso.com/ZendStudioCodeAutocomplete/
5.项目中出现.svn,如何隐藏?
选 中项目右键点击,在出来的菜单中选择Build Path -> Configure Inclusion / Exclusion Filters… .在“Exclusion patterns:” 框中点击“Add…“按钮,输入**/.svn/  点OK按钮再点Finish按钮。
6.代码格式化后发现显示格式不是我想要的,可以设置吗?
选择window菜单->Preferences->PHP->Code Style->Formatter。点左侧“Edit”按钮进行编辑。如果你懒的编辑,我也附上了我使用的格式,你可以导入我使用的代码格式。下载地址:formatter.rar (已下载 277 次)(记得下载后要解压)
7.zend studio9如何汉化?
选择Help菜单->Install New Software…在Work with框中复制此地址:http://archive.eclipse.org/technology/babel/update-site/R0.9.1/helios/, (提示:最后一个/线不能少)复制完地址后按回车键确认,这时会提示pending…(等待…),等侍完成后会出来很多语言列表让你选择,请选择 “Babel Language Packs in Chinese(Simplified)”简体中文包选择项,下一步选同意,再漫长的等待之后就汉化好了,提示重启zend studio。
8.如何选中整个行?
左键单击三次要选中的某一行,这样就选中整个行了。
9.zendstudio如何安装集成最新的svn插件?
选择Help菜单->Install New Software…在Work with中输入http://subclipse.tigris.org/update_1.8.x,等待完之后,除了Subclipse Integration for Mylyn 3.x (Optional)不要选之外,其它的都选上,下一步,完成。
10.zendstudio如何进行两个文件的比较?
选中你要比较的两个文件,右键点击,在弹出来的菜单中选取Compare With -> Each Other,这时会开启一个比较编辑器,就可以进行两个文件的比较了。(右上角的几个比较按钮自行测试它的功能)
11.新建PHP文件时怎么缺少后面的?>,如何补全?
选 择window菜单->Preferences->PHP->Code Style->Code Templates,在右测点Code,选择“Simple php file” 点“Edit…”进行编辑增加?>,这样新建文件时就有后面的?>。
12.zend studio9在线汉化没有成功,有汉化离线包没?
还是在线汉化吧,经测试离线汉化包有问题,已不提供了。
13.有zend studio9在线使用帮助教程吗?
在线使用教程地址:http://files.zend.com/help/Zend-Studio/zend-studio.htm
14.为什么html文件里面的内容格式化完都乱套了?
选 择window菜单->Preferences->Web->HTML FIles->Editor。把Line width设置长一些,可以设置成800(默认的是72)钩上“Clear all blank lines”选中Inline Elements里面的所有内容点击“Remove”全部删除,然后点OK按钮完成设置。
15.为什么我的PHP文件在打开方式中不能选择zend studio打开呢?
文件夹中*.php文件,无法指定用zend studio,右键选择打开方式,指定zend studio.exe打开也无反应。
打 开 “开始”——“运行”——输入“regedit”点回车——找到“HKEY_CLASSES_ROOT\Applications\zend studio.exe\shell\open1\command”,发现键值为:”C:\Program Files\Zend\Zend Studio 9.0.0\ZendStudio.exe” “%1″”,问题是这里,这个路径下的文件及文件夹已经删除,windows系统无法找到,所以无法添加,修改该键值为:”C:\Program Files\Zend\Zend Studio 9.0.2\ZendStudio.exe” “%1″”,(提示这个路径为你zendstudio安装所在的路径,所以要改成你安装zendstudio所在的路径)问题解决。

Apache开启伪静态 PHP APACHE 伪静态设置

环境:

系统 Windows

Apache 2.2

加载Rewrite模块:

在conf目录下httpd.conf中找到

LoadModule rewrite_module modules/mod_rewrite.so

这句,去掉前边的注释符号“#”,或添加这句。

允许在任何目录中使用“.htaccess”文件,将“AllowOverride”改成“All”(默认为“None”):

# AllowOverride controls what directives may be placed in .htaccess files.

# It can be “All”, “None”, or any combination of the keywords:

# Options FileInfo AuthConfig Limit

#

AllowOverride All

在Windows系统下不能直接建立“.htaccess”文件,可以在命令行下使用“echo a> .htaccess”建立,然后使用记事本编辑。

Apache Rewrite模块的简单应用:

Rewrite的所有判断规则均基于Perl风格的正则表达式,通过以下基础示例能写出符合自己跳转需求的代码。

1、请求跳转

目的是如果请求为.jsp文件,则跳转至其它域名访问。

例如:访问www.clin003.com/a.php跳转至b.clin003.com/b.php网页,访问www.clin003.com/news/index.php跳转至b.clin003.com/news/index.php网页

注意:不是使用HTML技术中的meta或者javascript方式,因为www.clin003.com/a.php这个文件并不存在,用的是Apache2.2服务器中的Rewrite模块。

修改 .htaccess或apche的配置文件httpd.conf文件,添加以下内容

 

RewriteEngine on

#开启Rewrite模块

RewriteRule (.*).php$ http://b.clin003.com/$1.jsp [R=301,L,NC]

#截获所有.jsp请求,跳转到http://b.clin003.com/加上原来的请求再加上.php。R=301为301跳转,L为rewrite规则到此终止,NC为不区分大小写

2、域名跳转

如果请求为old.clin003.com下的所有URL,跳转至b.clin003.com

 

RewriteEngine on

#开启Rewrite模块

RewriteCond %{REMOTE_HOST} ^old.studenthome.cn$ [NC]

#针对host为old.clin003.com的主机做处理,^为开始字符,$为结尾字符

RewriteRule (.*) http://b.clin003.com/$1 [R=301,L,NC]

3、防盗链

如果本网站的图片不想让其它网站调用,可以在 .htaccess或者apche的配置文件httpd.conf文件中添加以下内容

 

RewriteEngine on

#开启Rewrite模块

RewriteCond %{HTTP_REFERER} !^$

#如果不是直接输入图片地址

RewriteCond %{HTTP_REFERER} !img.clin003.com$ [NC]

#且如果不是img.clin003.com所有子域名调用的

RewriteCond %{HTTP_REFERER} !img.clin003.com/(.*)$ [NC]

RewriteCond %{HTTP_REFERER} !zhuaxia.com [NC]

RewriteCond %{HTTP_REFERER} !google.com [NC]

RewriteCond %{HTTP_REFERER} !google.cn [NC]

RewriteCond %{HTTP_REFERER} !baidu.com [NC]

RewriteCond %{HTTP_REFERER} !feedsky.com [NC]

RewriteRule (.*).(jpg|jpeg|jpe|gif|bmp|png|wma|mp3|wav|avi|mp4|flv|swf)$ http://clin003.com/err.jpg [R=301,L,NC]

#截获所有.jpg或.jpeg……请求,跳转到http://clin003.com/err.jpg提示错误的图片,注:该图片不能在原域名下,也不能在该.htaccess文件有效控制的文件夹中

 

4、不需要定义.htaccess文件

在Apache2confhttpd.conf 最后一行添加

RewriteEngine On

RewriteRule ^(.*)-htm-(.*)$ $1.php?$2

重启Apache

登陆后台开启全伪

(Adipoli jQuery 鼠标经过效果插件简单使用方法)

一、插件介绍

该插件主要图片加入鼠标经过后加上一点特效。

插件官方网站:http://jobyj.in/adipoli

二、简单用法

使该插件是很简单的。

第一步:添加css文件与js文件

<link href=”css/adipoli.css” rel=”stylesheet” type=”text/css”/>
<script src=”js/jquery-1.7.1.js” type=”text/javascript”></script>
<script src=”js/jquery.adipoli.min.js” type=”text/javascript”></script>

第二步:给指定的选择器实例化该方法

<script>
      $(‘#image1′).adipoli();
</script>

以下是带参数:

$(‘#image1′).adipoli({
    ’startEffect’ : ‘normal’,
    ’hoverEffect’ : ‘popout’
});

插件的使用参数:

Available Options:

  • startEffect : Default style of image
  • hoverEffect : Image style on mouse over
  • imageOpacity : opacity of image considered when start effect is transparent or overlay
  • animSpeed : Animation speed for the effect
  • fillColor : Overlay color
  • textColor : Text Color
  • overlayText : Default HTML to be displayed on overlay
  • slices : Number of slices for slice animations
  • boxCols : Number of boxes in a row for box animations
  • boxRows : Number of rows for box animations
  • popOutMargin : Margin of Image popout
  • popOutShadow : Shadow length of popout image. Shadow works for those browsers which support text-shadow css.

Start Effects:

  • transparent
  • normal
  • overlay
  • grayscale

Hover Effects:

  • normal
  • popout
  • sliceDown
  • sliceDownLeft
  • sliceUp
  • sliceUpLeft
  • sliceUpRandom
  • sliceUpDown
  • sliceUpDownLeft
  • fold
  • foldLeft
  • boxRandom
  • boxRain
  • boxRainReverse
  • boxRainGrow
  • boxRainGrowReverse

更多使用方法见官方。

QeePHP 的 URL 路由解析与生成

【文档的一些节选+使用技巧】

路由功能,简单来说就是 URL 重写。

比如我们最初的地址是: http://qeephp.com/index.php?cont … on=show&name=qeephp
经过优化后就是:http://qeephp.com/projects/qeephp

第二个地址相比第一个,不但更短,而且更有意义。也更容易被人记忆,当然对于搜索引擎来说也很友好。

过去要实现这样的功能,我们要做几件事:
1、修改服务器设置,启用 URL 重写功能,例如 Apache 的 mod_rewrite
2、为网站添加重写规则,每一个要重写的 URL 都得添加一次规则
3、在应用程序中编写一个生成 URL 的助手类,并根据一个规则表来生成优化后的网址

麻烦的事情就是如果我们要调整一下 URL 的结构或者新增一些规则,就得改同时修改网站的重写规则配置文件、助手类。如果要重写的网址数量一多,维护起来就非常不方便了。要是换个运行环境,说不定还不支持 rewrite,或者需要修改所有的重写规则(例如 lighttpd 的规则就和 apache 不同)。

————————————–

为了解决这个问题,各种新一代的框架都提供了 URL 的路由功能。

URL 路由功能分为两部分:
1、URL 地址的解析
2、URL 地址的生成

URL 地址的解析

URL 解析是把诸如 http://qeephp.com/projects/qeephp 这样的地址解析为应用程序需要的参数,这样框架才能知道应该调用哪一个控制器来完成这个请求,并且把参数传递给控制器。

http://qeephp.com/projects/qeephp 这个地址在 qeephp.com 上解析后就是:

控制器: projects
动 作: show
参 数: name=qeephp

这样一来在 projects 控制器的 show 动作方法中就可以通过 name 参数判断用户是要查看哪一个开源项目的信息了。

为了能够解析 http://qeephp.com/projects/qeephp 这样的地址,我们需要在配置文件中添加一条规则:

  1. projects_show:
  2.   pattern: “/projects/:name”
  3.   defaults:
  4.     controller: “projects”
  5.     action: “show”
  6.   config:
  7.     name: “[a-z0-9\-_]+”

复制代码

projects_show 是这个规则的名字,而 pattern 是规则匹配模式。匹配模式中的 :name 则是一个变量,而该变量通过 config 选项指定了比对规则为“[a-z0-9\-_]+”(name 参数的值只能是字母、数字下划线和横线)。

经过这样设置后,http://qeephp.com/projects/qeephp 这样的 URL 就能被正确解析了。

相对于在服务器配置文件中写重写规则,URL 路由提供的规则有几个好处:
1、不需要修改服务器设置的权限,我们只需要修改应用程序的配置文件
2、修改应用程序的设置就可以配置 URL 重写,因此不需要重新启动 Web Server 软件
3、比 Web Server 的重写规则更简单

URL 地址的生成

解决了 URL 的解析问题,还有 URL 的生成问题。

URL 路由提供的生成功能可以根据你提供的参数,自动匹配合适的规则,然后生成最终的 URL 地址。

例如:

  1. # 生成 /projects/fleaphp
  2. url(‘projects/show’, array(‘name’ => ‘fleaphp’))
  3. # 生成 /projects/qeephp
  4. url(‘projects/show’, array(‘name’ => ‘qeephp’))
  5. # 生成 /projects/example-todo
  6. url(‘projects/show’, ‘name/example-todo’)

复制代码

假如我们有多条规则,QeePHP 可以自动匹配出最合适那一条,然后生成对应的 URL 地址。

这种能力带来了下列好处:
1、我们再也不需要维护两个规则表了(一个用于解析,一个用于生成),一个规则表就搞定了一切
2、只需要修改规则表,就可以获得不同的 URL 地址,而不需要修改模板、程序中生成 url 的代码
3、只需要修改应用程序的设置,就可以让应用程序工作在不同的服务器环境中,适应各种情况

例如我们把前面的规则改为:

  1. projects_show:
  2.   regex: ‘/project-([a-z0-9\-_]+)\.html’
  3.   defaults:
  4.     controller: “projects”
  5.     action: “show”
  6.   config:
  7.     name: 1

复制代码

生成的 URL 地址就会自动变成: http://qeephp.com/project-qeephp.html 这样的。
这种灵活性可以为网站的用户体验、SEO 带来很多便利。

########################### 华丽的分割线 ###########################

SEO 优化

一个网站运营一段时间后,栏目设置很可能发生变化,此时就有可能导致 URL 变化。而 URL 变化的最大问题就是导致以前的连接失效,对用户体验非常不好,而且也会影响搜索引擎对网站的收录。所以我们必须保证以前的 URL 不失效。

例如以前新闻页面的网址是 http://my.com/123456.html,而现在是 http://my.com/news/sports/123456.html。对于这种需求,我们利用 URL 路由可以轻松搞定。

先写两个规则:

  1. # 解析和生成新的新闻页面 URL
  2. news_page:
  3.   regex: ‘/news/([a-z]+)/([0-9]+)\.html’
  4.   config:
  5.     category: 1
  6.     news_id:  2
  7.   defaults:
  8.     controller: news
  9.     action:     show
  10. # 解析老的新闻页面 URL
  11. news_page_keep_old:
  12.   regex: ‘/([0-9]+)\.html’
  13.   config:
  14.     news_id:  1
  15.   defaults:
  16.     controller: news
  17.     action:     show

复制代码

上述两条规则,放在前面的优先级更高。

当请求的 URL 是 http://my.com/123456.html 时,前面的规则匹配失败,而后面的规则匹配成功。因此请求送给了 news 控制器的 show 动作方法处理,并且附带 news_id 参数。

  1. function actionShow()
  2. {
  3.     $news_id = intval($_GET['news_id']);
  4.     $news = News::find($news_id)->get();
  5.     … 显示新闻内容
  6. }

复制代码

这样就保证了原有 URL 的有效性。

那么当请求是 http://my.com/news/sports/123456.html 时,前面的规则就匹配成功,此时就不会再匹配后面的规则。而请求还是 actionShow() 来处理。前面的规则多了一个 category 参数,这里并没有用上,直接忽略即可。但这个参数是必不可少的,会用于后面的 URL 生成。

现在我们来看看模板中生成 URL 的代码:

  1. url(‘news/show’, array(
  2.     ‘news_id’ => $news->id,
  3.     ‘category’ => $news->category_name
  4. ))

复制代码

可以看到,这里我们生成 URL 时使用了 category 参数,因此前面的规则会被用于生成 URL。最终我们会得到类似http://my.com/news/cars/23343.html 这样的结果。

现在我们已经完美的解决了问题:既保证了以前 URL 的有效性,又让访问者在访问老页面后可以通过页面中的 URL 导航到新格式的 URL 中。

————————————–

URL 随心变

除了 SEO,URL 路由还可以让我们随心所欲的构造 URL 地址。例如 http://qeephp.com/cases/19 这个 URL 规则是:

  1. cases_show:
  2.   pattern: “/cases/:id”
  3.   defaults:
  4.     controller: “cases”
  5.     action: “show”
  6.   config:
  7.     id: “[0-9]+”

复制代码

我们把规则改为:

  1. cases_show:
  2.   regex: ‘/mygod/show\-me\-the\-money/news\-sports\-(\d+)\.html’
  3.   defaults:
  4.     controller: “cases”
  5.     action: “show”
  6.   config:
  7.     id: 1

复制代码

这时 URL 就变成 http://qeephp.com/mygod/show-me-the-money/news-sport-19.html 了。可以说和以前的 URL 简直是两码事。

而这些修改和变化,完全不需要我们修改应用程序中的代码和模板代码,唯一需要改动的就是路有规则表。

unserialize()

unserialize

(PHP 3 >= 3.0.5, PHP 4, PHP 5)

unserialize –  从已存储的表示中创建 PHP 的值

描述

mixed unserialize ( string str [, string callback] )

unserialize() 对单一的已序列化的变量进行操作,将其转换回 PHP 的值。返回的是转换之后的值,可为 integerfloatstringarrayobject。如果传递的字符串不可解序列化,则返回 FALSE

unserialize_callback_func 指令: 如果在解序列化的时候需要实例化一个未定义类,则可以设置回调函数以供调用(以免得到的是不完整的 object “__PHP_Incomplete_Class”)。可通过 php.iniini_set().htaccess 定义‘unserialize_callback_func’。每次实例化一个未定义类时它都会被调用。若要禁止这个特性,只需置空此设定。还需要注意的是 unserialize_callback_func 指令是从 PHP 4.2.0 开始提供使用的。

注: callback 参数是在 PHP 4.2.0 中添加的

若被解序列化的变量是一个对象,在成功地重新构造对象之后,PHP 会自动地试图去调用 __wakeup() 成员函数(如果存在的话)。

例子 1. unserialize_callback_func 示例

<?php
$serialized_object
='O:1:"a":1:{s:5:"value";s:3:"100";}';

// unserialize_callback_func 从 PHP 4.2.0 起可用
ini_set('unserialize_callback_func','mycallback'); // 设置您的回调函数

function mycallback($classname) {
// 只需包含含有类定义的文件
// $classname 指出需要的是哪一个类
}
?>

注: 在 PHP 3 中,解序列化一个对象时是不保存方法的。而 PHP 4 打破了这个限制,同时保存了属性和方法。请参见类与对象中的序列化对象部分获取更多信息。

 

例子 2. unserialize() 示例

<?php
// 这里,我们使用 unserialize() 装载来自数据库的 $session_data 数组中的会话数据。
// 此例是描述 serialize() 的那个例子的补充。

$conn = odbc_connect ("webdb", "php", "chicken");
$stmt = odbc_prepare ($conn, "SELECT data FROM sessions WHERE id = ?");
$sqldata = array ($PHP_AUTH_USER);
if (!
odbc_execute ($stmt, &$sqldata) || !odbc_fetch_into ($stmt, &$tmp)) {
// 如果执行出错或返回错误,则初始化为空数组
$session_data = array();
} else {
// 现在我们需要的是 $tmp[0] 中已序列化的数据。
$session_data = unserialize ($tmp[0]);
if (!
is_array ($session_data)) {
// 出错,初始化为空数组
$session_data = array();
}
}
?>

参见 serialize()

Back to Top