PHP学习资料:https://pan.baidu.com/s/1bpvMTJ5
170209
逻辑运算符的优先级从高到低是:&&、||、AND、OR
170313
转义、还原字符串数据
string addcslashes(string str,string charlist)
参数str为将要被操作的字符串,参数charlist指定在字符串中的哪些自符前面加上反斜线“\”,如果产生charlist中包含\n、\r等字符,将以C语言风格转换,而其他非字母数字且ASCII码低于32或高于126的字符均转换成八进制表示。
echo"<p>----------------字符串转义------------------<p>";
$test = "php学习";
$a = addcslashes($test,"学");//转义指定的字符串
echo "\$a==$a";
echo "<br>";
$b = stripcslashes($a);//对转义后的字符串进行还原
echo "\$b==$b";
结果:
----------------字符串转义------------------
$a==php\345\255\246习
$b==php学习
170314
截取字符串
echo substr("Hello world",0,10)."<br>";
echo substr("Hello world",1,8)."<br>";
echo substr("Hello world",0,5)."<br>";
echo substr("Hello world",6,6)."<br>";
echo substr("Hello world",0,-1)."<br>";
echo substr("Hello world",-10,-2)."<br>";
echo substr("Hello world",0,-6)."<br>";
echo substr("Hello world",-2-3)."<br>";
结果:
Hello worl
ello wor
Hello
world
Hello worl
ello wor
Hello
world
我的分析:
start和length都为正数时,start是截取开始的位置,从0算起,截取时包括start。而length代表截取的长度。
start为负数,从字符串的末尾数,从1算起,截取时包括start。
length为负数,从字符串的末尾数,从1算起,截取时不包括length所在的那一位。
170315
表单元素
常用的表单元素有3种:输入域标记、选择域标记和、文字域标记等。
1.输入域标记
语法格式:
<form>
<input name = "file_name" type = "type_name"/>
</form>
2.选择域标记
3.文本域标记
4.test
<form action="index.php" method="post" name="form1" enctype="multipart/form-data">
<table width="405" border="1" cellpadding="1" cellspacing="1" bordercolor="#ffffff" bgcolor="#999999">
<tr bgcolor="#ffcc33">
<td width="103" height="25" align="right">姓名:</td>
<td width="144" height="25"><input name="user" type="text" id="user" size="20" maxlength="100" /></td>
</tr>
<tr bgcolor="#ffcc33">
<td height="25" align="right">性别:</td>
<td height="25" colspan="2" align="left"><input name="sex" type="radio" value="男" checked="checked">男<input name="sex" type="radio" value="女">女</td>
</tr>
<tr bgcolor="#ffcc33">
<td width="103" height="25" align="right">密码:</td>
<td width="289" height="25" colspan="2" align="left"><input name="pwd" type="password" id="pwd" size="20" maxlength="100"/></td>
</tr>
<tr bgcolor="#ffcc33">
<td height="25" align="right">学历:</td>
<td height="25" colspan="2" align="left"><select name="select"><option value="专科">专科</option><option value="本科" selected="selected">本科</option></select></td>
</tr>
<tr bgcolor="#ffcc33">
<td height="25" align="right">爱好:</td>
<td height="25" colspan="2" align="left"><input name="fond[]" type="checkbox" id="fond[]" checked="checked"/>音乐<input name="fond[]" type="checkbox" id="fond[]"/>其他</td>
</tr>
<tr bgcolor="#ffcc33">
<td height="25" align="right">个人写真:</td>
<td height="25" colspan="2" ><input name="photo" type="file" id="photo" size="20" maxlength="1000"/></td>
</tr>
<tr bgcolor="#ffcc33">
<td height="25" align="right">个人简介:</td>
<td height="25" colspan="2" ><textarea name="intro" id="intro" ccols="28" rows="4"></textarea></td>
</tr>
<tr align="center" bgcolor="#ffcc33">
<td height="25" colspan="3"><input type="submit" name="submit" value="提交"/><input type="reset" name="submit2" value="重置"/></td>
</tr>
</table>
</form>
170316
JavaScript常用事件
在PHP动态网页中引用JS文件
语法:
<script src=url language="Javascript"></script>
在网页中引用JS文件需要注意的事项如下:
1.在JS文件中,只能包含JavaScript脚本代码,不能包含script标记和HTML代码。
2.在引用JS文件的script与/script标记之间不应存在其他的JavaScript代码,即使存在,浏览器也会忽略此脚本代码,而只执行JS文件中的JavaScript脚本代码。
case1:应用JavaScript脚本制作二级导航菜单
<table>
<tr>
<td width="67" align="center"><a href="script.js">首 页</a></td>
<td width="75" align="center"><a href="#" onmousemove="Lmenu('新品')">新品上架</a></td>
<td width="75" align="center"><a href="#" onmousemove="Lmenu('购物')">购物车</a></td>
<td width="75" align="center"><a href="#" onmousemove="Lmenu('会员')">会员中心</a></td>
<td width="61" align="center"><a href="script.js">在线帮助</a></td>
</tr>
</table>
<div id="submenu" class="world_yellow"> </div>
<script language="javascript">
function Lmenu(value){
switch(value){
case "新品":
submenu.innerHTML="<a href='#'>商品展示</a>|<a href='#'>销售排行榜</a>|<a href='#'>商品查询</a>";
break;
case "购物":
submenu.innerHTML="<a href='#'>添加商品</a>|<a href='#'>移除指定商品</a>|<a href='#'>清空购物车</a>|<a href='#'>查询购物车</a>|<a href='#'>填写订单信息</a>";
break;
case "会员":
submenu.innerHTML="<a href='#'>注册会员</a>|<a href='#'>修改会员</a>|<a href='#'>账户查询</a>";
break;
}
}
</script>
case2:应用JavaScript脚本控制文本域和复选框
<form name="jsform" method="post" id="jsform" action="">
<input name="check[]" type="checkbox" checked="checked" value="鸡"/>
鸡
<input name="check[]" type="checkbox" value="鸭"/>
鸭
<input name="check[]" type="checkbox" value="狗"/>
狗
<input name="check2[]" type="checkbox" value="猪"/>
猪
<input name="type1" type="button" value="全选" onclick="checkAll()"/>
<input name="type2" type="button" value="全不选" onclick="uncheckAll()"/>
<input name="type3" type="button" value="反选" onclick="switchAll()"/>
</form>
<script language="javascript">
function checkAll(){
var elements = jsform.getElementsByTagName("input");
for(var i = 0; i<elements.length;i++){
if(elements[i].type=='checkbox'){
if(elements[i].checked==false){
elements[i].checked=true;
}
}
}
}
function uncheckAll(){
var elements = jsform.getElementsByTagName("input");
for(var i = 0; i<elements.length;i++){
if(elements[i].type=='checkbox'){
if(elements[i].checked==true){
elements[i].checked=false;
}
}
}
}
function switchAll(){
var elements = jsform.getElementsByTagName("input");
for(var i = 0; i<elements.length;i++){
if(elements[i].type=='checkbox'){
if(elements[i].checked==true){
elements[i].checked=false;
}else if(elements[i].checked==false){
elements[i].checked=true;
}
}
}
}
</script>
170317
日期和时间
获取本地化时间戳
echo "mktime函数返回的时间值:".mktime()."<p>";
echo "当前的日期为:".date("Y-m-d",mktime())."<p>";
echo "当前的时间为:".date("H:i:s",mktime())."<p>";
关于北京时间的配置请参考http://blog.csdn.net/gold_brick/article/details/62881817
获取当前时间戳
$nextWeek = time()+(7*24*60*60);
echo "Now:".date('Y-m-d')."<p>";
echo "Next Week:".date('Y-m-d',$nextWeek)."<p>";
获取当前日期和时间
echo "DATE_ATOM=".date(DATE_ATOM);
echo "<p>DATE_COOKIE=".date(DATE_COOKIE);
echo "<p>DATE_ISO8601=".date(DATE_ISO8601);
echo "<p>DATE_RFC822=".date(DATE_RFC822);
echo "<p>DATE_RFC850=".date(DATE_RFC850);
echo "<p>DATE_RSS=".date(DATE_RSS);
echo "<p>DATE_W3C=".date(DATE_W3C);
结果为:
DATE_ATOM=2017-03-17T10:30:16+08:00
DATE_COOKIE=Friday, 17-Mar-2017 10:30:16 CST
DATE_ISO8601=2017-03-17T10:30:16+0800
DATE_RFC822=Fri, 17 Mar 17 10:30:16 +0800
DATE_RFC850=Friday, 17-Mar-17 10:30:16 CST
DATE_RSS=Fri, 17 Mar 2017 10:30:16 +0800
DATE_W3C=2017-03-17T10:30:16+08:00
获取当前日期和时间
$arr = getdate();
echo $arr[year]."-".$arr[mon]."-".$arr[mday]."";
检验日期的有效性
$year = 2008;
$month = 2;
$day1 = 29;
$day2 = 30;
var_dump(checkdate($month,$day1,$year));
echo "<br>";
var_dump(checkdate($month,$day2,$year));
输出格式化的日期和时间
date(format)
date函数可以对format选项随意的组合
显示本地化日期和时间
setlocale(LC_ALL,"en_US");
echo "美国格式:".strftime("Toady is %A");
echo "<p>";
setlocale(LC_ALL,"chs");
echo "中文简体格式:".strftime("今天是%A");
echo "<p>";
setlocale(LC_ALL,"cht");
echo "中文繁体格式:".strftime("今天是%A");
日期比大小
$time1 = date("Y-m-d H:i:s");
$time2 = date("2008-3-5 16:30:00");
echo "变量\$time1的时间为:".$time1."<br>";
echo "变量\$time2的时间为:".$time2."<br>";
if(strtotime($time1)-strtotime($time2)<0){
echo "\$time1早于\$time2";
}else{
echo "\$time2早于\$time1";
}
计算页面脚本的运行时间
string microtime(void)
list($msec,$sec) = explode(" ",microtime());
sec是当前UNIX时间戳,msec为微秒数
/*声明run_time函数*/
function run_time(){
list($msec,$sec) = explode(" ",microtime());
return ((float)$msec+(float)$sec);
}
$start_time = run_time();
/*运行PHP代码段*/
$time1 = strtotime(date("Y-m-d H:i:s"));
$time2 = strtotime(date("2018-7-10 17:10:00"));
$time3 = strtotime(date("2018-1-1"));
$sub1 = ceil(($time2-$time1)/3600);
$sub2 = ceil(($time3-$time1)/86400);
echo "离放假还有<font color=red>$sub1</font>小时!!!,大约是有<font color=red>$sub2</font>天!!!";
echo "<p>";
echo "离2018年元旦还有<font color=red>$sub2</font>天!!!";
$end_time = run_time();
/*输出差值*/
$sub3 = $end_time-$start_time;
echo "该实例的运行时间为<font color=blue>$sub3</font>";
Cookie和Session
Cookie和Session是两种不同的存储机制,前者是从一个Web页面到下一个页面的数据传递方法,存储在客户端;后者是让数据在页面中持续有效的方法,存储在服务器端。
Cookie管理
echo"<p>----------------创建cookie------------------<p>";
setcookie("TMCookie","www.mrbccd.com");
setcookie("TMCookie","www.mrbccd.com",time()+60);
setcookie("TMCookie",$value,time()+3600,"/tm/",".mrbccd.com",1);
echo"<p>----------------读取cookie------------------<p>";
if(!isset($_COOKIE["visitime"])){
setcookie("visitime",date("y-m-d H:i:s"));
echo "欢迎第一次访问网站";
}else{
setcookie("visitime",date("y-m-d H:i:s"),time()+60);
echo "你上次访问网站的时间为:".$_COOKIE["visitime"];
}
echo "你本次访问网站的时间为:".date("y-m-d H:i:s");
echo"<p>----------------删除cookie------------------<p>";
setcookie("visitime","");
setcookie("visitime","",time()-1);
setcookie("visitime","",0);
Session管理
echo"<p>----------------创建会话------------------<p>";
session_start();
echo"<p>----------------注册会话------------------<p>";
$_SESSION["admin"] = null;
echo"<p>----------------删除单个会话------------------<p>";
unset($_SESSION["admin"]);
echo"<p>----------------删除多个会话------------------<p>";
$_SESSION = array();
echo"<p>----------------结束当前会话------------------<p>";
/*会话已经结束,首先应该注销所有的会话变量,然后使用session_destroy()函数清除结束当前
会话,并清空会话中的所有资源,彻底销毁Session*/
session_destroy();
echo"<p>----------------session设置失效时间------------------<p>";
session_start();
$time = 1*60;
setcookie(session_name(),session_id(),time()+$time,"/");
$_SESSION["admin"] = "mr";
echo"<p>----------------session临时文件------------------<p>";
$path = "./tmp/";
session_save_path($path);
session_start();
$_SESSION[username] = true;
echo"<p>----------------session缓存------------------<p>";
session_cache_limiter("private");
$cache_limit = session_cache_limiter(); //开启客户端缓存
session_cache_expire(30);
$cache_expire = session_cache_expire(); //设置客户端缓存时间(单位为分钟)
session_start();
Session的数据库存储:
echo"<p>----------------session数据库存储------------------<p>";
function _session_open($save_path,$session_name){
global $handle;
$handle = mysql_connect("localhost","root","root") or die("数据库连接失败");//连接MySQL数据库
mysql_select_db("db_database11",$handle) or die("数据库中没有此库名");//找到数据库
return (true);
}
function _session_close(){
global $handle;
mysql_close($handle);
return (true);
}
function _session_read($key){
global $handle;
$time = time();
$sql = "select session_data from tb_session where session_key='$key' and session_time>$time";
$result = mysql_query($sql,$handle);
$row = mysql_fetch_array($result);
if($row){
return($row['session_data']); //返回session名称及内容
}else{
return (false);
}
}
function _session_write($key,$data){
global $handle;
$time = 60*60; //设置失效时间
$lapse_time = time()+$time; //得到UNIX时间戳
$sql = "select session_data from tb_session where session_key='$key' and session_time>$lapse_time";
$result = mysql_query($sql,$handle);
return ($result);
}
function _session_destroy($key){
global $handle;
$sql = "delete from tb_session where session_key='$key'"; //删除session的SQL语句
$result = mysql_query($sql,$handle);
return ($result);
}
function _session_gc($expiry_time){
global $handle;
$lapse_time = time();
$sql = "delete from tb_session where $expiry_time < $lapse_time"; //删除过期session的SQL语句
$result = mysql_query($sql,$handle);
return ($result);
}
session_set_save_handler('_session_open','_session_close','_session_read','_session_write','_session_destroy','_session_gc');
session_start();
$_SESSION['user'] = "mr";
$_SESSION['pwd'] = "mrsoft";
Session和Cookie的区别
Session和Cookie的最大区别是,Session是将Session的信息保存在服务器上,并通过一个Session ID来传递客户端的信息,同时服务器接收到Session ID后,根据这个ID来提供相关的Session信息资源,Cookie是将所有的信息以文本文件的形式保存在客户端,并由浏览器进行管理和维护。
170320
图形图像处理技术
安装与配置
代码
<?php
/*
//创建一个简单的图像
$im=imagecreate(200,200); //创建一个画布(单位像素pixel)
$white=imagecolorallocate($im,225,66,159); //设置画布的背景颜色为粉色 (256RGB)
header('content-type:image/gif'); //设置gif Image
imagegif($im); //输出gif图像
imagedestroy($im);
*/
/*
//使用GD2函数在照片上添加
header("content-type:image/png");//定义输出的图像类型
$im = imagecreatefrompng("images/splash.png");//载入照片
$textcolor = imagecolorallocate($im,56,73,136);//设置字体颜色为蓝色,值为RGB颜色值
$fnt = "c:/windows/fonts/simhei/ttf";//定义字体
$motto = iconv("gb2312","utf-8","长白山天池");//定义输出字符串
imagettftext($im,220,0,480,340,$textcolor,$fnt,$motto);//写TTF文字到图中
imagepng($im);//建立JPEG图形
imagedestroy($im);//结束图形,释放资源
*/
/*
//使用图像处理技术生成验证码
session_start();
header("content-type:image/png");
$image_width = 70;
$image_height = 18;
srand(microtime()*100000);//设置随机数的种子
for($i = 0;$i<4;$i++){//循环输出四位的随机数
$new_number.=dechex(rand(0,15));
}
$_SESSION[check_checks]=$new_number;
$num_image = imagecreate($image_width,$image_height);//创建画布
imagecolorallocate($num_image,255,255,255);//设置画布颜色
for($i = 0;$i<strlen($_SESSION[check_checks]);$i++){
$font = mt_rand(3,5);//设置随机字体
$x = mt_rand(1,8)+$image_width*$i/4;//设置随机字体所在的x坐标
$y = mt_rand(1,$image_height/4);
$color = imagecolorallocate($num_image,mt_rand(0,100),mt_rand(0,150),mt_rand(0,200));//设置字符颜色
imagestring($num_image,$font,$x,$y,$_SESSION[check_checks][$i],$color);//水平输出字符
}
imagepng($num_image);
imagedestroy($num_image);
*/
//使用柱形图统计图书月销售量
include("jpgraph/src/jpgraph.php");
include("jpgraph/src/jpgraph_bar.php");//引用柱形图对象所在文件
$datay = array(160,180,203,289,405,488,408,299,166,187,105,287);//定义数组
$graph = new Graph(600,300,"auto");//创建画布
$graph->SetScale("textlin");
$graph->yaxis->scale->SetGrace(20);
$graph->SetShadow();//创建画布阴影
$graph->img->SetMargin(40,30,30,40);//设计统计图所在画布的位置,左右上下
$bplot = new BarPlot($datay);//创建一个矩形对象
$bplot->SetFillColor('orange');//设置柱形图颜色
$bplot->value->Show();//设置显示数字
$bplot->value->SetFormat('%d');//在柱形图中显示格式化的图书销量
$graph->Add($bplot);//将柱形图添加到图像中
$graph->SetMarginColor("lightblue");//设置画布背景色为淡蓝色
$graph->title->Set(iconv("UTF-8","GB2312//IGNORE","<<PHP从入门到精通>>2009年销量统计"));//创建标题
$a = array("1月","2月","3月","4月","5月","6月","7月","8月","9月","10月","11月","12月");//设置x坐标轴文字
$graph->xaxis->SetTickLabels($a);//设置x轴
$graph->title->SetFont(FF_SIMSUN);//设置标题的字体
$graph->xaxis->SetFont(FF_SIMSUN);//设置x轴的字体
$graph->Stroke();//输出图像
/*
//使用折线图统计图书月销售额
include("jpgraph/src/jpgraph.php");
include("jpgraph/src/jpgraph_line.php");//引用折现图对象所在文件
$datay = array(160,180,203,289,405,488,408,299,166,187,105,287);//定义数组
$graph = new Graph(600,300,"auto");//创建画布
$graph->img->SetMargin(40,30,30,40);//设计统计图所在画布的位置,左右上下
$graph->img->SetAntiAliasing();//设置折线的平滑状态
$graph->SetScale("textlin");
$graph->SetShadow();//创建画布阴影
$graph->title->Set(iconv("UTF-8","GB2312//IGNORE","<<PHP从入门到精通>>图书月销售额折线图"));//创建标题
$graph->title->SetFont(FF_SIMSUN,FS_BOLD);//设置标题的字
$graph->SetMarginColor("lightblue");//设置画布背景色为淡蓝色
$graph->yaxis->title->SetFont(FF_SIMSUN,FS_BOLD);//设置y轴标题的字体
$graph->xaxis->SetFont("min");
$graph->yaxis->HideZeroLabel();
$graph->ygrid->SetFill(true,'#EFEFEF@0.5','#BBCCFF@0.5');
$a = array("1月","2月","3月","4月","5月","6月","7月","8月","9月","10月","11月","12月");//设置x坐标轴文字
$graph->xaxis->SetTickLabels($a);//设置x轴字体
$graph->xaxis->SetFont(FF_SIMSUN);//设置x轴的字体
$graph->yscale->SetGrace(20);
$lplot = new LinePlot($datay);//创建一个折线图对象
$lplot->mark->SetType(MARK_FILLEDCIRCLE);//设置数据坐标点为圆形标记
$lplot->mark->SetFillColor('red');//设置柱形图颜色
$lplot->mark->SetWidth(4);//设置圆形标记的直径
$lplot->SetColor("blue");//设置折线图颜色为蓝色
$lplot->SetCenter();//在X轴的各坐标点中心位置绘制折现量
$graph->Add($lplot);//将折现图添加到图像中
$graph->Stroke();//输出图像
*/
/*
//使用3D饼状图统计各类商品的年销售额比率
include_once("jpgraph/src/jpgraph.php");
include_once("jpgraph/src/jpgraph_pie.php");
include_once("jpgraph/src/jpgraph_pie3d.php");//引用3D饼状图PiePlot3D对象所在的类文件
$data = array(266036,295621,335851,254256,254254,685425);//定义数组
$graph = new PieGraph(540,260,'auto');//创建画布
$graph->SetShadow();//设置画布阴影
$graph->title->Set(iconv("UTF-8","GB2312//IGNORE","应用3D饼状图统计2009年商品的年销售额比率"));
$graph->title->SetFont(FF_SIMSUN,FS_BOLD);//设置标题的字
$graph->legend->SetFont(FF_SIMSUN,FS_NORMAL);//设置图例字体
$pPlot = new PiePlot($data);//创建3D饼状图对象
$pPlot->SetLegends(array(
iconv("UTF-8","GB2312//IGNORE","IT数码率"),
iconv("UTF-8","GB2312//IGNORE","家电通讯"),
iconv("UTF-8","GB2312//IGNORE","家居日用"),
iconv("UTF-8","GB2312//IGNORE","服装鞋帽"),
iconv("UTF-8","GB2312//IGNORE","健康美容"),
iconv("UTF-8","GB2312//IGNORE","食品烟酒")));
$targ = array("","","","","","");
$alts = array("val=%d","val=%d","val=%d","val=%d","val=%d","val=%d");
$pPlot->SetCSIMTargets($targ,$alts);
$pPlot->SetCenter(0.4,0.5);//设置饼状图所在画布的位置
$graph->Add($pPlot);//将3D饼状图添加到图像中
$graph->StrokeCSIM();//输出图像到浏览器
*/
?>
运行截图
170323
文件系统
echo "<p>---------------------fgets读取文件---------------------<p>";
$fopen = fopen('170320.php','rb');
while(!feof($fopen)){//feof()函数测试指针是否到了文件结束的位置
echo fgets($fopen);//输出当前行
}
fclose($fopen);
echo "<p>---------------------fgetss读取文件---------------------<p>";
$fopen = fopen('170320.php','rb');
while(!feof($fopen)){//feof()函数测试指针是否到了文件结束的位置
echo fgetss($fopen);//该函数会过滤掉被读取内容中的html和php标记
}
fclose($fopen);
echo "<p>---------------------fread读取文件特定长度---------------------<p>";
$fopen = fopen('170320.php','rb');
echo fread($fopen,500);//读取文件内容的前32个字节
echo "<p>剩余内容<p>";
echo fread($fopen,filesize('170320.php'));//输出其余的文件内容
echo "<p>---------------------打开/关闭目录---------------------<p>";
$path = "D:\php\appserv\install\AppServ";
if(is_dir($path)){
if($dire = opendir($path))
echo $dir;
}else{
echo "路劲错误";
exit();
}
closedir($dire);
echo "<p>---------------------浏览目录---------------------<p>";
$path = "D:\php\appserv\install\AppServ";
if(is_dir($path)){
$dir = scandir($path);
foreach($dir as $value){
echo $value."<br>";
}
}else{
echo "路劲错误";
exit();
}
echo "<p>---------------------打开远程文件---------------------<p>";
fopen('http://localhost/mr/01/170320.php','rb');
170327/170328
面向对象
echo "<p>---------------------类的实例化---------------------<p>";
class SportObject{
function beatBasketball($name,$height,$avoirdupois,$age,$sex){
if($height>180 and $avoirdupois<=100){
return $name.",符合打篮球的要求";
}else{
return $name.",不符合打篮球的要求";
}
}
}
$sport = new SportObject();
echo $sport->beatBasketball('明日','185','80','20周岁','男');
echo "<p>---------------------类常量---------------------<p>";
class Book{
const BOOK_TYPE = "计算机图书";
}
echo Book::BOOK_TYPE;//输出常量(::是作用域操作符,可以在不创建对象的情况下调用类中的常量、变量和方法)
echo "<p>---------------------构造析构函数---------------------<p>";
/*
PHP使用的是一种'垃圾回收'机制,自动清除不再使用的对象,释放内存。
*/
class SportObject1{
public $name;
public $height;
public $avoirdupois;
public function __construct($name,$height,$avoirdupois){
$this->name=$name;
$this->height=$height;
$this->avoirdupois=$avoirdupois;
}
public function bootFootBall(){
if($this->height<185 and $this->avoirdupois<85){
return $this->name.",符合踢足球的要求";
}else{
return $this->name.",不符合踢足球的要求";
}
}
public function showMe(){
echo "是父类的方法";
}
function __destuct(){
echo "<p><b>对象被销毁,调用析构函数!</b></p>";
}
}
$sport = new SportObject1("明日","185","80");
//unset($sport);
echo "<p>---------------------继承---------------------<p>";
class BeatBasketBall extends SportObject1{
public $height;
function __construct($name,$height){
$this->height = $height;
$this->name = $name;
}
function showMe(){
echo "是我自己的方法";
}
}
$beatbasketball = new BeatBasketBall('科技','190');
echo $beatbasketball->showMe();
echo "<p>---------------------this---------------------<p>";
/*
当类被实例化后,$this同时被实例化为本类的对象
*/
class example{
function exam(){
if(isset($this)){ //判断变量$this是否存在
echo '$this的值为:'.get_class($this);
}else{
echo '$this未定义';
}
}
}
$class_name = new example();
$class_name->exam();
echo "<p>---------------------操作符::---------------------<p>";
class Book2{
const NAME = 'computer';
function __construct(){
echo '本月图书类冠军为:'.Book2::NAME.'';//输出默认值
}
}
class I_book extends Book2{
const NAME = 'foreigh language';
function __construct(){
parent::__construct();//调用父类的构造方法
echo '本月图书类冠军为:'.self::NAME.'';//输出本类中的默认值
}
}
$obj = new I_book();
echo "<p>---------------------clone对象---------------------<p>";
/*
clone对象会clone全部行为和属性。
*/
$book1 = new SportObject();
$book2 = clone $book1;//使用clone对象的方法给对象$book2赋值
echo "<p>---------------------对象比较---------------------<p>";
/*
判断两个对象之间的关系是克隆还是引用,可以用运算符"=="和"===",两个等号"=="是比较两个对象的内容,
3个等号"==="是比较对象的引用地址。
clone和引用的区别
clone就是复制
引用就是引用同一个地址
*/
class SportObject3{
private $name;
function __construct($name){
$this->name = $name;
}
}
$book = new SportObject('book');
$cloneBook = clone $book;
$referBook = $book;
if($cloneBook == $book){
echo "两个对象的内容相等<br>";
}
if($referBook === $book){
echo "两个对象的引用地址相等<br>";
}
echo "<p>---------------------对象类型检测---------------------<p>";
class SportObject4{}
class MyBook extends SportObject4{
private $type;
}
$cBook = new MyBook();
if($cBook instanceof MyBook){
echo '对象$cBook 属于 MyBook 类 <br>';
}
if($cBook instanceof SportObject4){
echo '对象$cBook 属于 SportObject4 类 <br>';
}
echo "<p>---------------------—__call()方法---------------------<p>";
/*
__call()方法:当程序试图调用不存在或不可见的成员方法时,PHP会先调用__call()方法来存储方法名及其参数。
__call()方法包含两个参数,即方法名和方法参数,其中,方法参数是以数组形式存在的
*/
class SportObject5{
public function myDream(){
echo '调用的方法存在,直接执行此方法<p>';
}
public function __call($method,$param){
echo "如果方法不存在,则执行__call()方法。<br>";
echo '方法名为:'.$method.'<br>';//输出第一个参数,即方法名
echo '参数有:';
var_dump($param);//输出第二个参数,是一个参数数组
}
}
$exam = new SportObject5();
$exam->myDream();//调用存在的方法
$exam->mDream('how','what','why');//调用不存在的方法
echo "<p>---------------------—__sleep()和__wakeup()方法---------------------<p>";
/*
PHP使用serialize()函数可以实现序列化对象。就是将对象中的变量全部保存下来,对象中的类则只保存
类名。在使用serialize()函数时,如果实例化的对象包含__sleep()方法,则会先执行__sleep()方法。
该方法可以清除对象并返回一个包含该对象中所有变量的数组。使用__sleep()方法的目的是关闭对象可能
具有的类似数据库链接等善后工作。
unserialize()函数可以重新还原一个被serialize()函数序列化的对象,__wakeup()函数则是恢复在
序列化中可能丢失的数据库链接及相关工作。
*/
class SportObject6{
private $type = "DIY";
public function getType(){
return $this->type;
}
public function __sleep(){
echo "使用serialize()函数将对象保存起来,可以存放到文本文件、数据库等地方<br>";
return $this;
}
public function __wakeup(){
echo "当需要该数据时,使用unserialize()函数对已序列化的字符串进行操作,将其转换回对象<br>";
return $this;
}
}
$myBook = new SportObject6();
$i = serialize($myBook);//序列化对象
echo '序列化后的字符串:'.$i.'<br>';//輸出字符串
$reBook = unserialize($i);//將字符串重新转换为对象
echo '还原后的成员变量:'.$reBook->getType();
echo "<p>---------------------—__toString()方法---------------------<p>";
/*
如果没有__toString()方法,直接输出对象将会发生致命错误(fatal error)
输出时echo或print后不要加多于的字符,要直接跟输出的对象,如echo '字串'.$myComputer是不可以的
*/
class SportObject7{
private $type = "DIY";
public function __toString(){
return $this->type;
}
}
$myComputer = new SportObject7();
echo '对象$myComputer的值为:';
echo $myComputer;
170313
加密技术
echo "<p>---------------------—使用crypt()函数进行加密---------------------<p>";
/*
crypt()函数时单向加密的,密文不可还原成明文
*/
$str = "This is an example!";
echo '加密前$str的值为:'.$str;
$crypttostr1 = crypt($str);//每次加密后的数据不相同
echo '<p>加密后$str的值1为:'.$crypttostr1;
$crypttostr2 = crypt($str,'am');//每次加密后的数据相同
echo '<p>加密后$str的值2为:'.$crypttostr2;
echo "<p>---------------------—使用md5()函数进行加密---------------------<p>";
echo md5("PHPER");
echo "<p>";
echo md5("PHPER",true);//返回16进制数,第二个参数如果为true,返回二进制形式的密文。默认是false
echo "<p>---------------------—使用sha1()函数进行加密---------------------<p>";
/*
sha后面的1是阿拉伯数字里的1
*/
echo sha1("PHPER");
echo "<p>";
echo sha1("PHPER",true);//第二个参数同md5
下一步到数据库了,学习过程暂时中断一段时间。