PHP学习之路

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

截取字符串

substr

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>

type1
type2

2.选择域标记

select

3.文本域标记

textarea

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>

test

170316

JavaScript常用事件

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">首&nbsp;页</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">&nbsp;</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

获取当前日期和时间

getdate

$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)
format1
format2
date函数可以对format选项随意的组合

显示本地化日期和时间

locale
strftime1
strftime1
strftime3

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管理

create_cookie
cookie_lifecircle

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的数据库存储:
session_dbsave

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加载GD库
JpGraph安装和配置

代码

<?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');

open_mode

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

下一步到数据库了,学习过程暂时中断一段时间。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值