PHP对象的串行化与反串行化

最后更新于:2022-04-01 21:42:29

什么时候使用串行化? 在网络中传输对象的时候 向数据库中保存文件的时候 今天我们要提到四个函数 全部串行化 1.serialize(对象名) 将指定的类对象串行化  $str=serialize($per)  //将per对象串行化,结果返回给$str 2.unserialize(串行化后的返回值) 返回结果是对象    $per=unserialize($str); 局部串行化 3.__sleep() 串行化某对象的部分属性。 4.__wakeup()反串行化时,初始化(其实是修改)对象内容 前两个的使用方法我们大概已经介绍过,接下来我们简单介绍一下__sleep()和__wakeup()使用方法 1.如果我们只想串行化一个对象中的部分属性我们可以使用 __sleep()函数 在类定义中添加 function__sleep()//只序列化类中的name和age成员 { $arr=new array('name','age');  name和age必须是类中的属性 可以根据自己的实际需要增加 Return arr; } 2.假如我们在类串行化的时候,per对象的name属性值为“姜彤”在反序列化的时候我想改成"张三"怎么办 function __wakeup() { This->name="张三"; }
';

PHP中的面向对象总结

最后更新于:2022-04-01 21:42:27

抽象方法:没有方法体,和{}且被abstract修饰的方法 抽象类:至少包含一个抽象方法的类 抽象类的用途:用于**定义一种规范**,继承该类必须将该抽象类中的抽象法方全部都实现 接口中只能能包含方法的定义 接口只能包含常量 继承接口必须将接口中的方法全部实现,也用于一种规范 接口和抽象类的区别 Abstractclass class1 { 可以包含成员属性 可以包含普通方法 至少有一个抽象方法 } Interface face1 { 所有属性必须是常量 所有方法都是抽象的(指只有方法,并不被abstract修饰) 所有成员必须是public类型 } 一个类只能继承一个抽象类,但可以继承多个接口 Class class1extends class2   //继承类 Class class2 implementsface1,face2,face3 Extends==implements 二者可以替换 多态 PHP是弱类型的,多态在PHP中体现的不是那么明显,在同一个类中不能存在两个同名的方法,因为PHP无法按照类型来区分两个方法,这点不同于强类型语言,但是PHP可以重载父类的方法,或者实现接口中的方法
';

PHP Smarty环境配置

最后更新于:2022-04-01 21:42:24

Smaty优点:1.代码分离 2.缓存技术 使用步骤: 1.下载Smaty模板 2.将模板中那个lib文件夹复制到项目中(一般为根目录,并且重命名在此命名为Smarty), 3.配置PHP 1.新建一个Smarty_inc.php文件 2.输入 Include_once("Smarty/Smarty.class.php");//包含Smarty类 $smarty=new Smarty();//实例化Smarty对象 //配置

$smarty->config_dir="Smaryt/Config_File.class.php";

配置文件目录路径,一般不更改

$smarty->caching=false;

是否开启缓存

$smarty->template_dir="./templates";

设置模板目录,手动创建,./代表当前目录必须设置

$samrty->complie_dir="./templates_c";

设置编译目录,手动创建,必须设置

$smarty->cache_dir="./smarty_cache";

设置缓存目录

$smarty->left_delimiter="{";$smarty->right_delimiter="}";

设置在HTML标志Smarty的开始和结束标签自定义也可以世{%%}

Smarty使用变量 定义变量 $smarty->assign("模板变量","值/数组"); 将改变量应用到特定的模板中 $smarty->display("模板名"); Eg: ~~~ $smarty->assign("title","我的第一个smarty程序"); $smarty->display("index.html"); 在index.html中使用 {$title} ~~~ 上述一次只能访问一个变量那么**怎样循环访问多个变量呢**?** 要想访问多个变量必须用到数组 定义 ~~~ $array={name->"jiangtong",name->"张三",name->"李四"} $smarty->assign($student,$name); $smarty->display("index.html"); ~~~ **在**index.html**中使用** 、

{section name="stuList"  loop="$student"}

loop代表循环那个数组

<p>{$student[stuList].name}</p>

 

<sectionelse>

//可以不写

 

{/section}

 

Smarty取出当前时间 {$smarty.now}
';

PHP环境(apache,PHP,Mysql)详细配置方法

最后更新于:2022-04-01 21:42:22

**安装前的准备:下载PHP,apache,mysql安装包,可以到相关官网上下载,下面是安装步骤** **1.**安装**Apache**,**直接运行安装即可,我们将其安装到D:/PHP/Apache/ 目录下** **2.**将**PHP**压缩包解压内容放到指定**PHP**目录(自己指定这里是D:/PHP/,并重命名为PHP5,将**PHP5目录中的PHP.iniDevelopment重命名为php.ini**) **3.**修改**Apache**配置文**件(D:\PHP\Apache\conf\httpd.conf)     1.加载PHP模块 在Apache配置文件添加 LoadModule php5_module "D:/PHP/PHP5/php5apache2_2.dll"  //D:/PHP/PHP5/为php安装目录     2. 添加AddType application/x-httpd-php .php .phtml //设置apache解文件类型 //指定php配置文件路径   3. 添加phpinidir "D:/PHP/PHP5" 设置php配置文件目录(先确保PHP安装目录中的PHP.iniDevelopment重命名为php.ini) **4.**重启**Apache** **5.验证PHP是否安装成功** 这里我们在D:\PHP\Apache\htdocs目录下创建一个phpinfo.php文件输入以下内容 ~~~ ~~~ 然后打开浏览器输入http://localhost/phpinfo.php  ,默认的是80端口,如果不是80端口localhost后面必须加端口号,如果安装成功,则打开PHP相关信息页面,否则检查相关目录是否安装正确 **6.安装mysql服务,直接运行mysql安装文件,按照提示一步一步的执行安装操作** **5**添加**Mysql**模块 1.在PHP5目录下ext目录找到libMysql.dll或php_mysql.dll和 php_mysqli.dll 复制到C盘Windows目录下 2.打开PHP配置文件 1.取消extension=php_mysql.dll和extension=php_mysqli.dll前面分号去掉 2.在php.ini中设置扩展路径extension_dir="D:/PHP/PHP5/ext" 3.重启Apache 4.在浏览器再次访问phpinfo.php页面,如果页面信息多了mysql和mysqli列表示添加模块成功,否则重新检查上述步骤 验证mysql是否
';

PHP常用魔术方法总结

最后更新于:2022-04-01 21:42:20

常用的魔术方法有:__Tostring ()  __Call()  __autoLoad()  __ clone()  __GET()   __SET()    __isset() __unset() **1.__Tostring()  用于定义输出对象引用时调用 常用于打印一些对象的信息**必须有返回值 eg:有一个persion类 Persion per =new persion() Echo per;    //直接调用会出错 我们可以在类的定义中添加__tostring()方法 Function  __Tostring() { $str=this->$name.this->age; Return $str; } **2.__clone()**对象的复制** 引用赋值 $per1=$per2;而这在内存中只有一块地址 而$per1=clone $per2  这时有两块内存地址 **3.__call()方法**当调用类实例中不存在的函数时自动执行** 如果试图调用类中不存在的函数,会出现语法错误,为了能够友好的提示 我们可以在类中声明Call()方法; Function __call($funName,$argu) { Echo "名为".$funName."参数为".printf($argh)."的函数不存在", } **4.__autoLoad自动加载使用的类文件 该函数是在引用的页面添加** 我们都使用过这样情况,在页面中需要调用其他php文件,我们需要使用include方法 但是如果有几十个页面需要引用,未免太过繁琐,我们可以在该页面中使用autoload方法 Function __autoload($className) { Include $className.".php"; } 这样凡是引用到其他类的地方,都会自动引用该类文件 前提类文件的名称必须是   类名.php 5.__GET()  访问类中私有属性 如果类中的属性设置为私有属性,在类的实例中是无法访问的,但怎样才能访问呢? 我们就可以使用__GET() Eg: 类中有 Class person { Private $name; Private $age; } 实例化 person per=new person() Per->$name; //这样是取不到值的 但是如果我们在类中增加__GET方法 Function __GET($proName) { Return this->$proName; } 我们再次调用Per->$name就可以访问了 这样做有人会提出疑问了,这样可以直接访问私有变量,和声明成公有的有什么区别呢? 如果声明成公有的,我们可以任意读取,如果是私有,如果我们增加了get方法,那么每次调用私有属性都会调用GET方法的内容,这样我们就可以在get方法中增加一些逻辑处理。 6.__SET()设置类中的私有属性 原理同上,我们可以再类中添加__SET()函数,每当通过调用类实例给私有属性赋值,都会执行__SET函数,函数原型: Function __SET($proName,$value) { This->$proName=$value; } 既然是方法赋值,我们就可以做一些逻辑处理 7.__isset()判断类中私有属性或方法是否存在时自动调用 首先我们先介绍一下isset方法,该方法用于判定属性和方法是否存在,但是我们无法通过类类实例判断类中的某个私有属性是否存在 如果我们使用isset(per->$name);//返回值是false,但是$name属性的确存在,怎么解决呢? 解决方法: 1.将$name定义为私有属性 2. 在类定义中添加 Function __isset($proName) { Return  isset(this->$proName);//再类内部是可以访问私有属性的 } 这样的话我们再次调用isset($name);返回值就为true了; 8.__unset()清除类中私有变量时自动调用 与之结合的是unset() unset方法可以删除属性,当我们需要删除类中属性的时候,如果是公有属性我们可以直接 删除,但是如果是私有我们只通过该方法就无法实现了 怎样实现呢我们可以使用__unset()方法实现该功能我们需要在类中添加 Function __unset($proName) { Unset(this->$proName); } 现在我们再调用unset($name);就可以删除person类中的私有属性$name了
';

PHP数据类型总结

最后更新于:2022-04-01 21:42:18

PHP共有8中数据类型: | **类型名称**|  **类型表示**|  **取值**| |-----|-----|-----| |  bool |  布尔型 |   true,false | |  integer |  整型 | -2147483647-2147483648 | |  string |  字符串型 |  字符串长度取决于机器内存 | |  float |  浮点型 |  最大值1.8e308 | |  object |  对象 | 通过new实例化 $obj=new person();  | |  array |  数组类型 |  $arr=array(1,2,3,4,5,6);//一维数组 | |  resourse |   |   | |  null |  空值 |  null | **布尔型bool :** 对于其他类型我们可以使用(bool)或者(boolean) 进行强制转换 eg:(bool)1=true; 以下几种情况在强制转化的时候默认为false: | **转换**|  **结果**| |-----|-----| |  布尔型的false var_dump((bool) false) |  bool(false) | |  整型 0  var_dump((bool) 0); |  bool(false) | |  浮点型 0.0  var_dump((bool) 0.0); |  bool(false) | |  字符串 ‘0’ var_dump((bool) '0'); |  bool(false) | |  空数组$arr=array(); var_dump((bool) $arr) |  bool(false) | |  不包含任何成员变量的空对象只在PHP4使用,PHP5中为true |  bool(false) | |  NULL或者尚未赋值的变量 var_dump((bool) NULL) |  bool(false) | |  从没有任何标记(tags)的XML文档生成的[SimpleXML]() 对象 |  bool(false) | 字符串'0.0'转换结果为bool(true) **注:-1和其他非零值(不论正负)都是true** **整型integer:** 整型的范围-2147483647--2147483647 ,如果超过该值会自动转换成float型 我们可以使用echo PHP_INT_SZIE  输出integer的字长,和机器有关。echo PHP_INT_MAX 输出integer的最大值 PHP中没有整除运算 如果执行 1/2 会产生  float的0.5  如果想实现整除效果,则可以使用 (int)(1/2)=0 或者使用round(25/7)=4 强制转化成整型 (int)或者(integer) bool型 ture 转换成 1 ,false转换成0 **浮点型float:** 取值范围 最大值 :1.8e308  不知道最小值是多少? 求高手告知 浮点数的字长也和机器有关, 好像没有PHP_FLOAT_SIZE 啊,求高手告知如何的到浮点数字长 **字符串类型string:** **定义字符串的4种方法**: 1.单引号 2.双引号 3.heredoc语法结构 4.nowdoc 语法结构(PHP5.3.0之后) **单引号** 单引号定义了最原始的字符串,里面的所有内容都按字符串处理,如果字符串中包含单引号则可以用\转义 **双引号** 双引号定义的字符串会解析一些特殊字符(\n,\b)和变量 可以将变量放置在双引号中的方式来代替将变量转换成 字符串(string): $num=10; $str = "$num"; //$str为字符串型的10  **heredoc语法结构** **<<<标示符** **字符串本身** **标示符** 结束时的标示符必须在一行的开始位置,而且标示符的定义格式也必须按照PHP定义的规则,只能包含数字,字母,下划线,并且不能以数字下划线开头 结束标示符哪一行不允许有其他字符,可以在标示符后面添加一个分号,切分号前后也不能有tab或空格,否则PHP将无法解析该标示符,会继续向下查找标示符,如果在文件结尾前仍没有找到则会产生一个错误 heredoc就是一个没有使用双引号的双引号,就是里面可以包含双引号,且不用转义,而且可以解析特殊字符和变量 **nowdoc 语法结构** **<<<'标示符'** **字符串本身** **标示符** nowdoc的开始标示符必须使用单引号括起来,结束标示符和其他规则都和heredoc一样 nowdoc就是没有使用单引号的单引号,nowdoc包含的字符串会原样输出,里面包含的特殊字符和变量不会被解析 **如果双引号中包含数组变量中的几种情况** **//**我们先定义以下数组 ~~~ $arr=array( 'one'=>array( 'name'=>'jiangtong', 'sex'=>'男' ), 'two'=>'zhaohaitao', 'three'=>'fanchangfa' ); ~~~ 上面是的数组中第一个元素二维的,后两个是一维的,我们访问一维的时候下面几种方式: ~~~ echo "$arr[two]"//key没有单引号 echo "$arr['two']"//key有单引号 会出错,如果我们改成 echo "{$arr['two']}"; 则可以正确输出结果 echo "{$arr[two]}"//有双大括号,但是key没有单引号 这种情况PHP会先寻找有没有常量banana,有的话则将其替换,由于没有two常量则出错  ~~~ **可见在访问一维数组的时候 要么不加key不加引号(考虑到第三种情况啊),加了就要被{}括起来,可以全不加。** **多维数组测试** ~~~ echo "$arr[one][name]"; //输出结果为Array[name] 可见它返回了一个数组,只解析了一维 echo"{$arr['one']['name']}";//输出结果为jiangtong ~~~ **在多维数组的访问中必须使用了大括号key必须使用双引号括起来** **数组类型** 在字符串类型中已经提到,被大括号括起来的,如果不加key引号,是合法的,那么PHP首先会查找是否有名为key的常量,有的话就会被替换,没有的话会产生一个找不到常量的警告才按普通字符串处理,所以建议大家一定加单引号 转换成数组使用(array)type  或者array(type) ,但是如果将只有一个值的转换成数组,会得到一个元素的数组,且下标为0,将NULL转换成数组会得到空的数组 我们可以在遍历数组的时候改变数组的值,在PHP5.0以上可以使用引用实现 ~~~ $arr=array('a','b','c','d','e' ); foreach($arr as &$value) { $value=strtoupper($value); echo $value; }//输出结果 ABCDE ~~~ **Object对象类型** 实例化对象我们使用new  加入有一个person类,我们可以通过以下方式   ~~~ $objPerson=new person(); ~~~ 强制转换 (object): 如果将一个对象转化成对象那么它没有任何改变,对于其他任何值将会实例化一个stdclass的对象,如果该值为NULL,则会实例化一个空对象,如果 将数组转换成对象那么会将数组的key作为对象的属性,value为属性值,其他类型的值则名为scalar的成员变量包含该值 ~~~ $arr=array('one'=>'a','two'=>'b' ); $obj=(object)$arr; echo $obj->one //输出结果为a; ~~~ **注:这是由key的数组如果没有字符key的数组,我不知道如何访问,谁知道希望告诉小弟一下,谢谢。** 对于其他值 ~~~ $obj1=(object)'jiang'; echo $obj1->scalar;//输出结果jiang ~~~ > **NULL 空类型** null大小写不敏感,NULL类型只有一个取值,表示一个变量没有值,下面三种情况变量被认为为NULL 1.被赋值为NULL 2.尚未被赋值 3.被unset();
';

PHP通用的分页组件(分页加绑定数据)

最后更新于:2022-04-01 21:42:15

**最近整理了一下项目中用到的一些分页组件,将其封装起来(可以说1.0版本),希望大侠们多提提意见,来,先看一下运行效果** ![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/0510d21c7f7818f684f668ef4c283376_727x340.gif) 样式可能不是太美观,不过我已将样式与功能分离,这样大家就可以根据自己的需要的风格定义样式了,先说下我这个组件的**优点:** ** **1.将分页与数据绑定合在一个文件输出** 2**.灵活性高:不局限于某一个表,我们可以通过传表名来获取不同的结果,表内字段名完全自动识别** **3.可以按照条件查询数据** **4.每页显示的条数也只是一个参数** **下面看一下代码** ~~~ 1)//如果页数大于1进行分页 { $pagination .= "
"; //previous button 上一页 if ($page > 1) $pagination.= "« previous"; else $pagination.= "« previous"; //pages if ($lastpage < 7 + ($adjacents * 2)) //页面小于13页,全部显示 { for ($counter = 1; $counter <= $lastpage; $counter++) { if ($counter == $page) $pagination.= "$counter"; else $pagination.= "$counter"; } } elseif($lastpage > 5 + ($adjacents * 2)) //页面大于11页隐藏部分分页 { //close to beginning; only hide later pages if($page < 1 + ($adjacents * 2)) //如果分页值为7一下的显示方式 { for ($counter = 1; $counter < 4 + ($adjacents * 2); $counter++)//显示1搭配9 { if ($counter == $page) $pagination.= "$counter"; else $pagination.= "$counter"; } $pagination.= "..."; $pagination.= "$lpm1"; $pagination.= "$lastpage"; } //in middle; hide some front and some back elseif($lastpage - ($adjacents * 2) > $page && $page > ($adjacents * 2))//如果分页值离左右边界的距离都大于6 { $pagination.= "1"; $pagination.= "2"; $pagination.= "..."; for ($counter = $page - $adjacents; $counter <= $page + $adjacents; $counter++)//则显示分页值为中心左边6个右边6个 { if ($counter == $page) $pagination.= "$counter"; else $pagination.= "$counter"; } $pagination.= "..."; $pagination.= "$lpm1"; $pagination.= "$lastpage"; } //close to end; only hide early pages else { $pagination.= "1"; $pagination.= "2"; $pagination.= "..."; for ($counter = $lastpage - (2 + ($adjacents * 2)); $counter <= $lastpage; $counter++) { if ($counter == $page) $pagination.= "$counter"; else $pagination.= "$counter"; } } } //next button if ($page < $counter - 1) $pagination.= "next »"; else $pagination.= "next »"; $pagination.= "
\n"; } //实现绑定数据功能 echo ""; echo ''; //echo""; //echo''; //echo''; //echo''; //echo''; //echo''; //echo''; foreach($arrayTitle as $title) { echo''; } echo ''; //在下面的循环里可以稍微加点逻辑 while($row=@mysql_fetch_array($result)) { echo ''; foreach($arrayColName as $col) { if($col=='title') echo ""; else if($col=='xg1125') echo ""; else if($col=='sc1125') echo ""; else echo ""; //正常情况下的输出 } //echo ""; //echo ""; //echo ""; //echo ""; //echo ""; //echo ""; //echo ""; echo ''; } echo "
ID标题类型发布时间点击次数修改删除'.$title.'
".$row['title']."修改删除".$row[$col]."".$row['ID']."".$row['title'].".".$row['sort'].".".$row['Date']."".$row['click']."修改删除
"; echo $pagination; } ?> ~~~ **下面看一下调用方法 调用很简单只是根据情况传递参数** ** ~~~ $page='ManageNews.php';//要提交的页面 $adj=3;//要查询的页面两边各放几个按钮 $limit=10;//每页要显示的条数 $table='news';//查询的表名 $strwhere=" where sort="."'".$sort."'"; //查询的where 条件 $addPage='AddNews.php?newid=';//添加要跳转的页面 $sql="SELECT id, title, addDate, (CASE sort WHEN '0' THEN '科技新闻' WHEN '1' THEN '最新活动' WHEN '2' THEN '技术服务' WHEN '3' THEN '诚聘英才' END ) AS sort, click FROM `news`" ; //要执行的查询语句 $arrayTitle=array('编号','标题','类型','发布时间','点击次数','修改','删除');//数据绑定每列的标题 必须和下面的每列的列名对应 $arrayColName=array('id','title','sort','addDate','click','xg1125','sc1125');//数据表中要显示的列名,当为xg1125时表示修改,sc1125删除 echoPage($page,$adj,$limit,$table,$sql,$arrayTitle,$arrayColName,$strwhere,$sort,$addPage); ~~~ **以上就是我整理的分页逻辑,自己发现的问题:健壮性有待提高,我会尽快的完善一下,希望大家能够多提提意见,小弟不胜感激,我定会虚心接受。**
';

php中如何使用KindEditor编辑器

最后更新于:2022-04-01 21:42:13

前不久做了一个小网站,发布新闻的时候,同事推荐了一个好的富文本编辑器kindeditor,觉得用的挺方便,今天在这总结一下,简单的介绍一下kindeidtor使用,这里只将核心的一些配置说明列在下面,首先说一下准备工作: 1.下载:Kindeditor编辑器(是一个文件夹,在这重命名为eidtor)将其放在网站根目录下面, 2.引用:在同一级目录中创建一个news.php文件,用来引用该编辑器,下面是news.php中的内容 ~~~ ~~~ 该段代码中第一段js脚本主要是用来引用editor编辑器js文件(必须的),第二段js代码主要设置编辑器的样式,里面的东西大家可以根据需要增减,每一项的具体含义我在这不多说,大家可以参考网上的一些说明 3.配置eidtor编辑器,富文本编辑器有一个重要的功能是可以上传一些图片,使用之前需要进行配置,打开eidtor文件夹下 php文件夹下的upload_json.php文件,进行配置 ![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/c77368b1fb76f57d621795932c174217_377x131.gif) editor默认的将图片放到了editor文件夹下的attached文件夹下,大家可以根据需要更改,同时也可以限制上传文件的大小,和文件类型. 经过上面的设置,就可以使用图文并茂的编辑器了。
';

前言

最后更新于:2022-04-01 21:42:11

> 原文出处:[PHP入门到精通](http://blog.csdn.net/column/details/phpspecialcolumn.html) 作者:[jt521xlg](http://blog.csdn.net/jt521xlg) **本系列文章经作者授权在看云整理发布,未经作者允许,请勿转载!** # PHP入门到精通 > PHP一些语法,特性,方法的总结,内容涵盖了PHP入门到深入的所有环节
';