活着的死人 发表于 2015-2-3 23:31:33

PHP教程之Unserialize与Autoload

到现在,对排版还是不很熟练,经常会排不好。    凡是是一个及格的PHP法式员,就应当晓得Unserialize与Autoload,然而要说起两者之间的关系,生怕一览无余的人就不多了。
说个例子,假定咱们可以拿到第三方的序列化数据,但没有响应的类界说,代码以下:
<?php $string = 'O:6:"Foobar":2:{s:3:"foo";s:1:"1";s:3:"bar";s:1:"2";}'; $result = unserialize($string); var_dump($result); /* object(__PHP_Incomplete_Class) public '__PHP_Incomplete_Class_Name' => string 'Foobar' (length=6) public 'foo' => string '1' (length=1) public 'bar' => string '2' (length=1) */ ?>当咱们反序列化一个对象时,假如对象的类界说不存在,那末PHP会引入一个未完成类的概念,即:__PHP_Incomplete_Class,此时固然咱们反序列化胜利了,但仍是没法会见对象中的数据,不然会呈现以下报错信息:
The script tried to execute a method or access a property of an incomplete object. Please ensure that the class definition of the object you are trying to operate on was loaded _before_ unserialize() gets called or provide a __autoload() function to load the class definition.
这不是甚么难事儿,只需做一次强迫类型转换,酿成数组就OK了:
<?php $string = 'O:6:"Foobar":2:{s:3:"foo";s:1:"1";s:3:"bar";s:1:"2";}'; $result = (array)unserialize($string); var_dump($result); /* array '__PHP_Incomplete_Class_Name' => string 'Foobar' (length=6) 'foo' => string '1' (length=1) 'bar' => string '2' (length=1) */ ?>不外假如体系激活了Autoload,情形会变得庞杂些。特地插句话:PHP其实供应了一个名为unserialize_callback_func设置装备摆设选项,但意思和autoload差不多,这里就不引见了,我们就说autoload,例子以下:
<?php spl_autoload_register(function($name) { var_dump($name); }); $string = 'O:6:"Foobar":2:{s:3:"foo";s:1:"1";s:3:"bar";s:1:"2";}'; $result = (array)unserialize($string); var_dump($result); ?>履行下面代码会发明,spl_autoload_register被触发了,多半时分这是成心义的,但假如碰到一个界说不妥的spl_autoload_register,就悲催了,好比说上面这段代码:
<?php spl_autoload_register(function($name) { include "/path/to/{$name}.php"; }); $string = 'O:6:"Foobar":2:{s:3:"foo";s:1:"1";s:3:"bar";s:1:"2";}'; $result = (array)unserialize($string); var_dump($result); ?>毫无疑问,由于找不到类界说文件,所以报错了!改改spl_autoload_register一定行,但条件是你能改,假如触及第三方代码,咱们就不克不及私自做主了,此时咱们需求一种办法让unserialize能绕开autoload,最复杂的办法是把咱们需求的类FAKE出来:
<?php spl_autoload_register(function($name) { include "/path/to/{$name}.php"; }); class Foobar {} // Oh, Shit! $string = 'O:6:"Foobar":2:{s:3:"foo";s:1:"1";s:3:"bar";s:1:"2";}'; $result = (array)unserialize($string); var_dump($result); ?>不能不说,下面的代码真的很狗屎!那怎样做才好呢?我大致写了一个完成:
<?php spl_autoload_register(function($name) { include "/path/to/{$name}.php"; }); $string = 'O:6:"Foobar":2:{s:3:"foo";s:1:"1";s:3:"bar";s:1:"2";}'; $functions = spl_autoload_functions(); foreach ($functions as $function) { spl_autoload_unregister($function); } $result = (array)unserialize($string); foreach ($functions as $function) { spl_autoload_register($function); } var_dump($result); ?>代码固然多了点,但最少没有FAKE类,看上去恬逸多了。
熟悉HTML/CSS/JS等网页基本元素,完成阶段可自行制作完整的网页,对元素属性达到熟悉程度

仓酷云 发表于 2015-2-4 01:05:16

学好程序语言,多些才是王道,写两个小时代码的作用绝对超过看一天书,这个我是深有体会(顺便还能练打字速度)。

活着的死人 发表于 2015-2-7 22:05:01

我要在声明一下:我是个菜鸟!!我对php这门优秀的语言也是知之甚少。但是我要在这里说一下php在网站开发中最常用的几个功能:

若天明 发表于 2015-2-21 21:27:43

首先声明:我是一个菜鸟,是一个初学者。学习了一段php后总是感觉自己没有提高,无奈。经过反思我认为我学习过程中存在很多问题,我改变了学习方法后自我感觉有了明显的进步。

小女巫 发表于 2015-3-6 21:56:07

建议加几个专业的phper的群,当然啦需要说话的人多,一处一点问题能有人回答你的,当然啦要让人回答你的问题,平时就得躲在里面聊天,大家混熟啦,愿意回答你问题的人自然就多啦。

愤怒的大鸟 发表于 2015-3-13 21:46:50

这些中手常用的知识,当你把我说的这些关键字都可以熟练运用的时候,你可以选择自己

再现理想 发表于 2015-3-20 02:33:07

如果你可以写完像留言板这样的程序,那么你可以去一些别人的代码了,

小魔女 发表于 2015-3-20 13:38:14

本文当是我的笔记啦,遇到的问题随时填充

简单生活 发表于 2015-3-25 06:01:53

使用 jquery 等js框架的时候,要随时注意浏览器的更新情况,不然很容易发生框架不能使用。

分手快乐 发表于 2015-3-27 14:10:02

曾经犯过一个很低级的错误,我在文件命名的时候用了一个横线\\\\\\\'-\\\\\\\' 号,结果找了好几个小时的错误,事实是命名的时候 是不能用横线 \\\\\\\'-\\\\\\\' 的,应该用的是下划线\\\\\\\'_\\\\\\\' ;

柔情似水 发表于 2015-3-28 02:50:38

php是动态网站开发的优秀语言,在学习的时候万万不能冒进。在系统的学习前,我认为不应该只是追求实现某种效果,因为即使你复制他人的代码调试成功,实现了你所期望的效果,你也不了解其中的原理。

山那边是海 发表于 2015-3-30 20:25:35

不禁又想起那些说php是草根语言的人,为什么认得差距这么大呢。

第二个灵魂 发表于 2015-4-10 18:57:20

有位前辈曾经跟我说过,phper 至少要掌握200个函数 编起程序来才能顺畅点,那些不熟悉的函数记不住也要一拿手册就能找到。所以建议新手们没事就看看php的手册(至少array函数和string函数是要记牢的)。

只想知道 发表于 2015-4-15 03:33:55

最后介绍一个代码出错,但是老找不到错误方法,就是 go to wc (囧),出去换换气没准回来就找到错误啦。

变相怪杰 发表于 2015-5-8 05:04:58

真正的方向了,如果将来要去开发团队,你一定要学好smarty ,phplib这样的模板引擎,

再见西城 发表于 2015-5-8 07:21:15

这些都是最基本最常用功能,我们这些菜鸟在系统学习后,可以先对这些功能深入研究。

蒙在股里 发表于 2015-5-11 16:35:14

开发工具也会慢慢的更专业,每个公司的可能不一样,但是zend studio是个大伙都会用的。

若相依 发表于 2015-6-15 04:03:27

有位前辈曾经跟我说过,phper 至少要掌握200个函数 编起程序来才能顺畅点,那些不熟悉的函数记不住也要一拿手册就能找到。所以建议新手们没事就看看php的手册(至少array函数和string函数是要记牢的)。

谁可相欹 发表于 2015-6-19 17:04:48

不禁又想起那些说php是草根语言的人,为什么认得差距这么大呢。

深爱那片海 发表于 2015-6-21 21:42:15

当留言板完成的时候,下步可以把做1个单人的blog程序,做为目标,
页: [1] 2
查看完整版本: PHP教程之Unserialize与Autoload