php的基本语法加强 Parse : 解析 error : 错误 syntax : 语法 ? php 可以和 html 混合使用 ? php 的变量的定义使用 //php中,定义一个变量要以$符号打头 $a=890;//我定义了一个变量, 该变量名叫 $a , 然后给该变量赋了一个 值890? php 的变量的数据类型,是变化的,php变量的数据类型是由运行时的上下文决 定? php区分大小写 $i = 89; $I=90; $abc=90; $Abc=900; ? php 的变量的名称,应当以字母或者下划线开头,不要用数字开头,也不要用特殊字符开头 . $3abc=89; php 数据类型有哪些 ? 有三大类 1. 基本数据类型 1.1 整型 1.2 小数型(浮动数) 包含单精度和双精度 1.3 布尔类型 (表示真,和 假) 1.4 字符串 2. 复合数据类型 2.1 数组(array ) 2.2 对象 (objec t) 3. 特殊数据类型 3.1 null 3.2 资源类型(resource) 37讲 整型细节说明 更新时间:2012年11月04日19时18分 来源: 基本数据类型的入门案 例: ? 整型 整数类型可以表示一个整数,比如 : $ts=1; $ts=-12; ? 布尔类型 布尔型可以表示真或者假,比如 : $ts=true; $ts=false; ? 小数类型 小数类型可以表示一个小数(float,doubl e) $ts=1.12 $ts=3.1415926 ? 字符串类型 字符串类型可以表示一个字符串 $ts=“我是一个好人 hello ”基本概念: 何为定义一个变量 <?php $a=90; //相当于我们定义了一个变量 $a,并赋值 90 ?> 什么叫给变量赋值 <?php $a=78; $a=8; //表示用新的值替代 78 $a=”hello”;//表示$a 的类型变化 .?> 整型的细节讨论 ?在php中一个整型数据可以用十进制,也可以用八进制和十六 进制 比如 : $a = 0123; // 八进制数 (是以0开头 )$a = 0x1A; // 十六进制数 0123 = 3*8的0次方 + 2*8的1次方+ 1*8的二次方 =3*1+2*8+1*64=83 0x1A= A*16的0次方 +1*16的一次方=10+16=26 $a=123=3*10的0次方+2*10的1此方+1*10的二次方=3+20+100=123 ? php的整数都是有符号数 . 通过该图,我们可以看出,php的整数的二进制的最高位表 示符号? 通过 PHP_INT_SI ZE 可以显示我们自己的机器,一个整数用几个字节表 示echo PHP_INT_SI ZE; 通过PHP_INT_MAX 可以显示int 最大的数有 多少echo PHP_INT_MA X; 请问? 为什么 PHP_INT_MAX是 21474 83647 我们一起推一下 请问, php 的int 型,负数最大表示多少 ? 负数和正数一样大 2的31次方减一 ? 如果一个整数的范围超过了最大范围,则自动变成 float38讲 布尔细节 浮点数细节 字符串细节 算术运算符? 更新时间:2012年11月06日13时53分 来源: 学生的问题 ? $a=2; 问在内存中 2是怎样存 在的 00000000 00000000 00000000 00000010 -> 0*2的0次方+1*2的一次方+..0=0+2=2 $a=-2 问在内存中形式 布尔类型 简单的说 布尔类型就两个值 true, 一个fal se; 举例: //布尔类型 $a=true; $b=false ; 布尔值 FALSE 自身 整型值 0 (零) 浮点型值 0.0 (零) 空 字符串, 以及 字符串"0" 不包括任何元素的数组 不包括任何成员变量的对象(仅PHP 4.0 适用) 特殊类型 NULL (包括尚未设定的变量 ) $conn=mysql_connect(“localhost”,”root”,”root”); if($conn){ echo„ok?; }else{ echo„没有ok?; } 浮点数的细节 1.浮点数(也叫双精度数或实数) 2.浮点数的字长和平台相关,通常最大值是 1.8e308 并具有 14 位十进制数字的精度 (这个限制很 重要) ? 精度要从左边开始的第一个非0的数字计算 . 字符串的细节 $a=”hello”; 请问 $a 占用了多个是字节 5个字节 一个字符串类型可以表示多大的串 ? ?理论上,我们对字符串大小没有限制,即只有不超过内存就可 . ?我们定义字符串的时候,可以用单引号,也可以使用 双引号区别如下: $i=90; $user1="hello$i"; $user2='hello$i'; echo '<br/>user1='.$user1 ; echo '<br/>user2='.$user2 ; 从上面案例我们看出, 当一个变量包含在 “”号中时,会输出它的值,而包含在??中是输出其字符本身 . 案例2 如果字符串是包围在单引号(„)中, 除了来处理 ”时,会输出 ”外,其它规则都一样 php数据类型的自动转换 php的表达式 所谓表达式,就是任何有值的东西 . $a=90+89; php的算术运算符 + 、 -、*、 / 、% 39讲 算术运算符? 比较运算符 逻辑运算符 更新时间:2012年11月08日17时42分 来源: php的算术运算符 + 、 -、*、 / 、% $a=90; $b=7; if($a%$b==0){ echo '能整除'; }else{ echo '不能整除!'; } ++ 和 – 快速入门: $a=90; $a++; //等价于 $a=$a+1; echo $a; $b=89; $b--; //等价于$b=$b-1; echo '<br/>'.$b; 细节 我们的++ 和 – 分为前++ 后 ++ , --也分为 前- - 和 后 - - $a=56; $b=$a++; echo $b; echo $a; 对上面代码的分析如下: $a=56; //$b=$a++; //等价于 $b=$a; $a=$a+1; $b=++$a; //等价于 $a=$a+1; $b=$a; echo $b."||"; //-->$b 57 echo $a; //-->$a 57 左加 += 左减 -= 左乘 *= 左除 /= 左取模 %= $a=90; $a-=90; //$a=$a-90; echo $a; 比较运算符 案例: $a=2; $b=2.0 //只有值相等就为true if($a= =$b){ echo„$a==$b?; } //全等,要求$a 和 $b 值和类型要相等 if($a= = =$b){ } 对 != != = 说明 //只有值不相等,则为true if($a!=$b){ echo '$a!=$b'; } //只要值不相等,或者类型不相等,则为true if($a!==$b){ echo '$a!==$b'; } 请编写一个程序,该程序可以接收两个数(可以是整数,也可是小 数),并判断两个数是大于?小于?还是等于? 对应的案例: <?php $a=123; $b=90; if($a>$b){ echo '$a>$b'; } if($a<$b) { echo '$a<$b'; } if($a==$b){ echo '$a==$b'; } ?> 逻辑运算符 要求大家掌握的知识点有: 搞清每个逻辑运算的规则 案例 $a=10; $b=7; if($a++>8 || $b++>7){ echo 'ok!'; } echo 'a='.$a.'b='.$b; //把结果填写 $a=10; $b=7; if($a++>10 && $b++>7){ echo 'ok!'; } echo 'a='.$a.'b='.$b; $a=10; $b=7; if($a++>18 && $b++>7){ echo 'ok!'; } echo 'a='.$a.'b='.$b; ? 面试题: and && 都表示逻辑与 ,他们的区别在什么地方 主要体现在优先级上面 and 的优先级 and< = <&& or < = < || 配合案例: $e = false || true; $f = false or true; var_dump($e, $f); $e 是 true $f 是 false;..... 40讲 三元运算符 类型运算符 运算符优先级 更新时间:2012年11月11日18时53分 来源: php基本语法-三元运算符 基本语法 表达式1 ? 表达式2 : 表达式3 规则: 如果表达式1 的运算结果是 true, 则取 表达式2 的值,否则,取表达式3的值. 举例 : <?php $a=90; $b=180; $c=$a>$b? (12-10):"hello,world"; echo 'c=='.$c; ?> php 的字符串运算符 案例: $a="hello,world"; $b=123; $c=$b.$a; //$a 具体表示内容和 $b 表示内容拼接 echo $c; 从上面案例我们看出, 当两个变量(基本数据类型) 用 . 连接的时候,就表示把他们的内容拼接 类型运算符(了解) 基本语法是: instanceof 用于确定一个 PHP 变量是否属于某一类 class 的实例,通常在面向对象开发中可能用的. class Dog{} class Cat{} //创建一个对象 $cat1=new Cat; //var_dump($cat1 instanceof Dog); //在实际开发中,我们可能需要去判断某个变量是否是某个类型 if($cat1 instanceof Cat){ echo '$cat1 是一只猫'; } 运算符优先级的说明: //****运算优先级***** ? 如果将来你们有一个表达式很复杂,建议使用() 来指定其运算优先级 $a=3; $b=++$a*3; echo $b; 41讲 顺序控制 分支控制(if ifelse switch) 程序流程图 更新时间:2012年11月16日10时30分 来源: php程序的三大流程控制 ? 顺序控制(从上到下,从左到右) $a=7; echo “a=”.a; echo“hello!”; $a++; echo “a=”.a; echo“O(?_?)O”; $a++; echo “a=”+a; 所谓顺序控制流程,就是不加控制的流程,默认情况,会按照,顺序来执行你编写的代 码 ? 分支控制 一个简单的定义: 有选择的来执行我们的 代码.分为 1. 单分支 2. 双分支 3 多分支 1. 单分支的基本语法结构 if(条件表达式 ){ 语句; //... //.... } 这里我们,这里的条件表达式不管多复杂,最总运算的结果就是 true 或者 false; 快速入门: 编写一个程序,可以输入人的年龄,如果该同志 的年龄大于18岁,则输出 “你年龄大于18,要对 自己的行为负责 !” $age=7; if($age>18){ echo '你的年龄大于18'; } 2. 双分支 基本语法结 构 if(条件表达式 ){ //n多语句; }else{ //n多语句; } 编写一个程序,可以输入人的年龄,如果该同志 的年龄大于18岁,则输出 “你年龄大于18,要对 自己的行为负责!”。否则 ,输出”你的年龄不 大 这次放过你了 .” 代码: $age=4; if($age>18){ echo '你的年龄大于18'; }else{ echo '你的年龄小于18'; } echo '<br/>程序结束!'; 3. 多重分支 基本语法结构是 if(条件表达式 ){ //n多语句 }else if (条件表达式 ){ //n 多语句 }else if(条件表示式 ){ //. }//这里可能还有更多的else if else{ } ? 对上面的结构请注意 : (1) else if 可以有一个,也可以有多 个 (2) else 可以没有 快速入门案例 : 编写一个程序,可以输入人的年龄,如果该同志 的年龄大于18岁,则输出 “你年龄大于18,要对 自己的行为负责,送入监狱”。如果该同志的年 龄大于10岁并且小于等于18,则输出 “你的年龄 也不小了,把你送少管所.”。其它情况,则输出 “小孩子,下次注意”。 代码如下: $age=34;【1】 if($age>18【2】){ echo '你要被送入监狱';【3】 }else if($age>10 【4】 && $age<=18【5】){ echo '送入少管所';【6】 }else{ echo '下次注意';【7】 } echo "over";【8】 流程分析图 : switch分支语句 基本语法结 构 switch(表达式){ case 常量1: //n多语句; break ; case 常量2: //n多语句 break ; defua l: //n多语句; break ; } ? 请注意: 1. case 语句有一到 多2. defaul 语句可以没有(根据自己代码的业务逻 辑) 3. 通常,在case 语句后,要带break ,表示退出switch 语句 4. 常量的类型 (int, float, 字符串, 布尔型 ) 快速入门案例 : 请编写一个程序,该程序 可以接收一个字符,比如 : a,b,c,d,e,f,g a表示星期一,b表示星期 二 … 根据用户的输入显 示相依的信息.要求使用 switch 语句完成 $myChar="b"; switch($myCha r){ case "a": echo '今天星期一,猴子穿新衣 '; break ; case "b": echo '今天星期二,猴子当小二 '; break ; case "c": echo '今天星期三,猴子爬雪山 '; break ; defau lt: echo '没有匹配的日期 '; } echo 'okokook'; 一个案例: $i=“11“; switch ($i){ case 10: echo '10'; case 1.3: echo '11'; break ; defau lt: echo 'hello '; //break ; case 11: echo '12'; break ; } 该案例得出一个结论 : //最终的结论是 : 首先按照case顺序进行配置,如果一个都没有匹配到,则执行 default语句的内容,直到遇到break,则退出switch Default语句放置的位置对执行的结果没有影响 如果$a=”1”,则会自动转化为整型1 42讲 循环控制?(for) 更新时间:2012年11月19日15时24分 来源: 学生的问题: 老师,说一下if语句和switch的区别,及应用场景 。回答: 从我们学习 if 和 switch 分支看,if 对某个范围的判断,而switch是对一个点的判断, 所以我们可以这样去选 择他们: 应用场景: 当我们 的分支就是几个点的时候(比如判断坦克的方向),就应当使用swtich ,如果你的分支是几个区域(范围)的判断, 则考虑使用 if ? 循环控制流程 首先说 for 循环控制 基本语法结 构 for(循环初值; 循环的条件; 步长 ){ //n多语句; } 为什么需要循环控制 ? 问题 : 请输出9000000句,”你好,北京 ” 这样一问题: 怎样让我们的某段代码,循环的执行 分析图 for($i=0;$i<2;$i++){ echo '<br/>你好,北京'; } echo "over"; 内存图: 43讲 循环控制?(while dowhile) 打印金字塔案例 更新时间:2012年11月20日11时54分 来源: while循环 基本语法结构是 while(循环条件 ){ //循环体 ,语句 } 案例: 使用while来打印 10句”你好北京 ” 代码: //*****while循环***** $i=0;//$i循环控制变量 while($i<10){ echo '<br/>你好北京'.$i; //这里我们对循环控制变量,自增 . $i++; } 流程分析图 : do..while循环控制 基本语法结构 do{ //循环体 }while(循环条件 ); 快速入门: 循环的显示 10句,”你好北京 ”;$i=0;【1】//循环控制变 量 do{ echo '<br/>dowhile你好北京'.$i;【 2】 //对循环控制变量修改 $i++;【3】//这里有程序员自己控制步长 .}while($i<10【4】 ); 执行的流程图 : 综合案例: 要求: 请使用循环控制语句,输出一个空心的菱形 ->两个思想 1. 死去活来 2.先易后难 3. 建立自己的函数库和工具库(积累 ) * * * * * * * * 但是这个菱形的层数可以灵活的变 化.比较困难-------》简单化 <---- ----> 案例如下: //打印出金字塔的一半 //死去活来 //外层的for循环控制层数 for($i=1;$i<=3;$i++){ //内层控制每层*的个数 for($j=1;$j<=$i;$j++){ echo '*'; } echo '<br/>'; } //打印出整个金字塔 //如果打印3层 // * * -> 1 2个空格 1个* (1-1)*2+1=1 // ** *** -> 2 1个空格 3个* (2-1)*2+1=3 // *** ***** -> 3 0个空格 5个* (3-1)*2+1=5 $n=20; for($i=1;$i<=$n;$i++){ //在打印*前,先打印空格 for($k=1;$k<=$n-$i;$k++){ echo " "; } //内层控制每层*的个数 for($j=1;$j<=($i-1)*2+1;$j++){ echo '*'; } echo '<br/>'; } 请大家打印出一个空心金字塔 * * * **** 思路: 我们可以这样考虑,在给每行输出* 号的时候,要有判断,(该给*号给*号,该给空格给 空格) 思路肯定分析 : 和一个空心的菱形 45讲 break语句 continue语句 常量 更新时间:2012年11月23日15时22分 来源: 循环相关的语句-break 基本的概念: 表示结束当前的 for 、 while 、do..while 、switch, 流程, 可以给一个数字,表示退出到 第几层. 快速入门案例 : for($i=0;$i<13;$i++){ echo '$i='.$i."<br/>"; if($i==10){ break ; } } 快速入门的案例 2: $i=0; while(++$i){ switch($i){ case 5: echo "quit at 5<br/>"; break ; case 10: echo "quit at 10<br/>"; break 2; default: break ; } }echo '$i='.$i; 结果是: quit at 5 quit at 10 $i=10 分析图: 从上面的案例,我们得到几个结论 : 1. break语句 默认跳出 1层 2. break语句 后面带的数字,不能超过实际可以跳出的循环层数,否则,会报 fatal error 循环相关语句-conti nue 基本概念: continue 用于结束本次循环剩余代码,从新开始新的一次循环(如果条件为真,就继续执行), continue 后面也可以带 数字,表示从第几次循环重新开始 快速入门: for($i=0;$i<13;$i++){ if($i==10){ continue; } echo '$i='.$i."<br/>"; } 结果 $i=0 $i=1 $i=2 $i=4 $i=5 $i=6 $i=7 $i=8 $i=9 $i=10 $i=11 $i=12 hello 流程 goto语 句 基本概念: 通过goto语句我们可以将程序跳转到指定的地方去执 行. goto 标签; 标签: 语句; 快速入门案例 : goto a; echo 'aa'; a: echo 'bb'; 快速入门案例 2 for($i=0,$j=50; $i<100; $i++) { while($j--) { if($j==17) goto end; } } echo "i = $i"; end: echo 'j = 17 '.$i."||".$j; 结果: j = 17 php中常量 说明: 所谓常量,我们可以理解成就是特殊的变量: 体现在 1. 定义常量前面不需要 $ 2. 常量一旦定义,则不能修改 其值 3. 常量在定义的时候,就需要它赋初值 . 4. 常量可以通过 define 或者 const 5. 常量的名称,我们一般说是 全部大写,然后用下划 线间隔6. 什么时候需要使用常量: 在程序中我们不希望某个值变化,则考虑使用常量,比如圆周率 ,税率.... 快速入门案例 : <?php //第一种方法 define("TAX_RATE",0.08); echo TAX_RATE; //第二种方法(php5.3) const TAX_RATE2=0.1; echo '-'.TAX_RATE2; ?> 46讲 函数基本概念 函数快速入门 更新时间:2012年11月25日18时08分 来源: 函数讲解 提出一个问题? 请大家完成这样一个需求: ?输入两个数,再输入一个运算符(+,-,*,/),得到结果. 如果我们不考虑使用新的技术,用我们现在的知识结构,完成 <html> </head> <meta http-equiv="content-type" content="text/html;charset=utf-8"/> </head> <?php //请大家完成这样一个需求: //?输入两个数,再输入一个运算符(+,-,*,/),得到结果. $num1=34; $num2=90; $oper="-"; //$res表示结果 $res=0; switch($oper){ case "+": $res=$num1+$num2; break; case "-": $res=$num1-$num2; break; case "*": $res=$num1*$num2; break; case "/": $res=$num1/$num2; break; default: echo '运算符号有误!'; } echo "计算结果是=".$res; ?> </html> 从该代码分析,我们发现,如果别的页面也需要这样的功能,则代码的复用性不好--->函数引出 现在我们使用函数,来快速体验好处,示意图: funcs.php (这个文件,我们定义了一个函数) <?php //我们一个计算,+ - * / 的代码集合->函数 //1. function 是一个关键字 //2. jiSuan 函数名(由程序员取名) //3. $num1,$num2,$oper 是函数的参数列表(形参) function jiSuan($num1,$num2,$oper){ //$res 表示计算的结果 $res=0; switch($oper){ case "+": $res=$num1+$num2; break; case "-": $res=$num1-$num2; break; case "*": $res=$num1*$num2; break; case "/": $res=$num1/$num2; break; default: echo '运算符号有误!'; } //表示返回一个结果. return $res; } ?> func01.php (该文件使用到了我们定义的函数.) <html> </head> <meta http-equiv="content-type" content="text/html;charset=utf-8"/> </head> <?php //引入你需要的php文件 require 'funcs.php'; //请大家完成这样一个需求: //?输入两个数,再输入一个运算符(+,-,*,/),得到结果. $num1=34; $num2=90; $oper="*"; //以后,要计算结果,则可以直接调用函数 $res=jiSuan($num1,$num2,$oper); echo "计算结果是=".$res; ?> </html> 讨论函数之细节,和其运行原理 自定函数的基本语法结构 //参数列表,用处是接受数据. function 函数名(参数列表){ //函数体;(完成某一个功能的指令集合,这个必须有) //return 语句; (return 语句主要的用处是返回一个结果,这个可以没有) } 上机小练习: 上次我们 定义一个函数,可以打印不同的图形 function printTest($n,$name){ } 47讲 函数使用 函数调用初步理解 更新时间:2012年11月27日17时55分 来源: php页面相互调用的知识点 目前我们有这样一个需求: (1) a.php 页面要使用 b.php 定义的函数,我们可以使用 如下指令 require require_once include include_once 举例 require 的用法 <?php require(„要引入的文件名?); $filePath=”abc.php” require $filePath; require „要引入的文件名(路径)? ?> 案例说明: <?php //1. //require 'b.php'; //2. 通过变量引入 //$fileName="b.php"; //require $fileName; //3. require ('b.php'); //这里就是所谓的调用函数->怎样理解函数的调用 abc(); echo 'hello iii'; ?> require 和require_once 区别 这两个区别为,前者遇到即包含文件,后者会判断是否已经包含过了,如果包含过了,则不再包含文件。一可以节省资源,二可 以避免重复定义的错误。 redeclare: 再次声明. include: 包含,包括 举例说明: include和 include_once的区别 他们的作用和功能都可以把一个页面,包含到另外一个页面 基本用法 <?php include(„被包含的文件?); include„被包含的文件?; include $filePaht; ?> 区别: 这两个区别为,前者include遇到即包含文件,后者include_once会判断是否已经包含过了,如果包含过了,则不再包含文件。 一可以节省资源,二可以避免重复定义的错误。 证明: 再谈 include 和 require 区别 ( 同时 include_once 和 require_once 区别) 相同的地方就是,都是可以引入别的页面. 不同的地方是: include 如果出现了错误,会继续执行,require 出现错误,则会终止程序. 证明: 小结: 我们应当使用哪个? 我们做项目的时候,基本上使用的 require_once ? 注意我们的requir_once / require ... 应当放在 php 最前面. 48讲 函数调用深入理解 函数使用注意事项? 更新时间:2012年11月29日15时23分 来源: 如何理解函数的调用过程 <?php //我们一个计算,+ - * / 的代码集合->函数 //1. function 是一个关键字 //2. jiSuan 函数名(由程序员取名) //3. $num1,$num2,$oper 是函数的参数列表(形参) function jiSuan($num1,$num2,$oper){ //$res 表示计算的结果 $res=0; switch($oper){ case "+": $res=$num1+$num2; break; case "-": $res=$num1-$num2; break; case "*": $res=$num1*$num2; break; case "/": $res=$num1/$num2; break; default: echo '运算符号有误!'; } //表示返回一个结果. return $res; } $a=12; $b=45; $type="+"; $res=jiSuan($a,$b,$type); echo "res=".$res; ?> 函数调用的流程图 : 一个通俗理解图: 为了加深大家对函数调用的理解我们,举例(自己调用自己的案例) <?php function abc($n){ if($n>2){ abc(--$n); }else{ echo '$n='.$n."<br/>"; } } abc(4); ?> 函数自己调用自己-》这个就称为递归调用. 函数的深入使用讨论 函数的基本结构 function 函数名(参数列表){ //函数体; //return 语句; } ? 参数列表可以是多个参数 ? 参数可以多个,同时,其数据类型可以是php语言支持的任意类型 ? 函数名开头的字母,以_ 或者 A_Z 或者 a-z ,不要用数字或者特殊字符开头 ? 函数名不区分大小写 ,这个与变量不一样. function Abc(){} 和 function abc(){} 是同一个函数. ? 一个自定义函数中的变量是局部的,函数外不生效 案例: function abc3() { $a=45; echo 'a='.$a; } abc3(); echo 'aa='.$a;// 这里会报一个错误: Undefined variable: a ? 在php中有三种提示 notice : 注意 waring: 警告 error : 错误 ? 使用global全局变量的时候,可使用在函数外的变量 案例,和分析图 $a=12; function abc3(){ //global $a;//我要在abc3中使用到外层 $a; $a+=45; } abc3(); echo $a; 分析图: 49讲 函数使用注意事项? 函数作业布置 更新时间:2012年11月30日16时20分 来源: ? 如果在函数中,我们不希望使用某个变量,或者是希望彻底的不再某个变量,则可以使用 unset(变量名) ; 将该变量彻底 删除. $a=12; function abc3($a){ unset($a);//表示不再abc3函数范围内,不在使用$a,后面需要全新定义; $a=45; } abc3($a); echo $a; ? 在php函数中,我们可以给某些参数,赋一个默认的值. 案例说明: function abc($b,$a=2){ $res=$a+$b; return $res; } $e=70; echo abc($e).' ||'; echo abc($e,90); $f=70; echo abc($e,$f); ? php传递变量的时候,默认是值传递,如果需要引用(地址)传递,可以使用 &变量名; 举例说明: 50讲 函数再回顾 自定义函数 更新时间:2012年12月03日15时01分 来源: 回顾45讲49讲函数内容,请参考45讲到49讲笔记内容。 函数分为两大类 ? 自定义函数 自己写的函数 ? 系统函数 php语句本身给你提供,让你直接使用的函数, php设计者认为,在项目开发的过程,很多人都会用的一下功能,则就直接提供 给你? 比如: 我要取一个数的绝对值? <?php funct myAbs($num){ if($num<0){ return -$num; }else{ return $num; } } ?> 由系统提供. 51讲 位运算? 更新时间:2012年12月04日17时47分 来源: 位(bit)运算 二进制 所谓二进制就是逢二进一 (0,1), 因为使用二进制只有 0, 1 两个数,简单,易于电子方式实现 , 同时,通过0,1 组合可以表 示任意一个数. ? 二进制有三个重要的概念 1. 原码 用二进制来表示一个数,这个码就是原码. 1 ------> 原码 00000000 0000000 0000000 00000101 = 1*2的零次方+0*2的一次方+1* 2的二次方=1+0+4=5 2. 负数的反码=它的原码符号位不变,其它位取反(0->1,1->0) 反码(正数的反码和它的原码一样 , 负数反码 是 符号位不变其它位取反) 补码(正数的补码和它的原码一样,负数的补码是 它的反码+1) 举例 -1 -1的原码 10000000 00000000 00000000 00000001 -1的反码 11111111 11111111 11111111 11111110 -1 的补码 11111111 11111111 111111111 11111111 3. 在计算机运算的时候,都是以补码的方式来运算的 4+5=>计算机 4-5=4+(-5) 这句话意思就是,不管一个数是正数还是负数,都要被转成补码,然后进行运算. 位运算一览表 该图的前面四个是位运算 其运算规则是: 按位与& : 两位全为,,结果为1 按位或| : 两位有一个为1,结果为1 按位异或 ^ : 两位一个为0,一个为1,结果为1 按位取反 : 0->1 ,1->0 看看前面给出的题,是否完成 ~2=? 步骤 : 首先要求出 2的补码 2是正数 所以 原码=反码=补码 2 原码 00000000 00000000 00000000 00000010 ~2 11111111 11111111 11111111 11111101 (补码)->原码 ? 负数的 原码-》反码-》补码 11111111 11111111 11111111 11111101-> 推出其反码 (对补码-1) 11111111 11111111 11111111 11111100 推出原码 52讲 位运算? 更新时间:2012年12月06日10时57分 来源: 10000000 00000000 00000000 0000011 -> -3 ~-5=? -5 的 补码找出来. -5 原码 10000000 00000000 00000000 00000101 -5 反码 11111111 11111111 11111111 11111010 -5 补码 11111111 11111111 11111111 11111011 ~-5取反 00000000 00000000 00000000 00000100 (补码) 4 2&3=? 2&3 首先要找到 2 和 3的补码 2 的补码 00000000 00000000 00000000 00000010 3 的补码 00000000 00000000 00000000 00000011 2&3 00000000 00000000 00000000 00000010 [补码 2|3=? 2 的补码 00000000 00000000 00000000 00000010 3 的补码 00000000 00000000 00000000 00000011 2|3 00000000 00000000 00000000 00000011 2^3 2 的补码 00000000 00000000 00000000 00000010 3 的补码 00000000 00000000 00000000 00000011 2^3 00000000 00000000 00000000 00000001 13&7=? 5|4=? -3^3=? 位移运算 在php 中位运算有两种 >> (右移) << (左移) 运算的规则是 : 算术右移:低位溢出,符号位不变,并用符号位补溢出的高位 算术左移: 符号位不变,低位补0 根据我们前面的规范,来完成几个案例 $a=1>>2; 1 的补码 00000000 00000000 00000000 00000001 1>>2 00000000 00000000 00000000 00000000 $b=-1>>2; 步骤 -1 的补码 -1 的原码 10000000 00000000 00000000 00000001 -1 的反码 11111111 11111111 11111111 11111110 -1 的补码 11111111 11111111 11111111 11111111 -1 >> 2 11111111 11111111 11111111 11111111 补码 结果 补码->原码 反码 11111111 11111111 11111111 11111110 原码 10000000 0000000 00000000 00000001 $c=1<<2; 1<<2 1的补码 00000000 00000000 00000000 00000001 00000000 00000000 00000000 00000100 $d=-1<<2; 53讲 数组介绍 数组的创建 数组的遍历 更新时间:2012年12月07日17时49分 来源: 10进制->2进制 7 对 除 2 数组(重点) 提出一个问题? 一个养鸡场有6只鸡,它们的体重分别是3kg,5kg,1kg,3.4kg,2kg,50kg 。请问这六只鸡的总体重是多少?平均体重是多少? 请你 用现在掌握的技术编一个程序。 现在我们使用现有的技术来解决问题 array01.php $hen1=3; $hen2=5; $hen3=1; $hen4=3.4; $hen5=2; $hen6=50; 如果我们的变量很多,如果我们分别取变量名,显示程序无法控制. 怎么办? 我们可以使用一个新的数据类型array 数组,来统一个管理这一组数 什么是数组 可以用于存放多个数据的数据类型,我们称为数组 快速体验案例: 用数组来解决养鸡场的问题 //使用数组来完成案例 $hens[0]=3; $hens[1]=5; $hens[2]=1; $hens[3]=3.4; $hens[4]=2; $hens[5]=50; $hens[6]=30; $allWeight=0; //遍历整个数组 //有时为了知道某个数组共有多少个元素,可以使用系统函数count echo "共有".count($hens)."只鸡<br/>"; for($i=0;$i<count($hens);$i++){ echo "第".($i+1)."只鸡体重=".$hens[$i]."<br/>"; $allWeight+=$hens[$i]; } echo '<br/>总体重是='.$allWeight.'平均体重='.$allWeight/count($hens); 小结: 该案例重点说明数组基本使用,细节后面说 数组创建 在php中,数组就是关键字和值的集合, 我们可以这样创建 ? 创建数组 $arr[0]=123; $arr[1]=90; $arr[2]=8; 几个概念: [0] -> 这个我们称为下标,或者称为 关键字 $arr[0] -> 这个称为数组的一个元素. $arr[0]=123; 123 表示该$arr[0]元素对应的值 $arr –》这个是该数组的名称. 在php数组中,元素存放的值可以是任意数据数据类型 , 举例说明: <?php $arr[0]=123; $arr[1]="hello"; $arr[2]=45.6; $arr[3]=true; $arr[4]=null;//即使放入了一个null,也要占一个空间 echo "数组大小".count($arr); //遍历一下 for($i=0;$i<count($arr);$i++){ echo '<br/>'.$arr[$i]; } ?> ? 创建数组的第二种方法 基本语法 $数组名=array(值,.......); 举例说明: $arr=array(1,90,"helllo",89.5); //遍历一把 for($i=0;$i<count($arr);$i++){ echo "<br/>".$arr[$i]; } ? 第三种方式创建数组(在默认情况下,我们的元素的下标,是从0开始给你编号,但是实际上,也可以自己指定) 基本语法 $arr[„logo?]=”北京”; $arr[?hsp?]=123; .... 或者 $arr=array(”logo”=>”北京”,”hsp”=>123,4=>678); 案例演示: $arr[0]=123; $arr[1]=90; //遍历 /* for($i=0;$i<count($arr);$i++){ echo '<br/>'.$arr[$i]; }*/ //这个foreach适用范围更广 foreach($arr as $key2=>$val2){ echo $key2."=".$val2."<br/>"; } 54讲 数组的引用 数组使用细节? 更新时间:2012年12月09日20时22分 来源: ? 注意事项 ?如果我们创建一个数组的时候,没有给某个元素指定下标,php就会自动的用目前最大的那个个下标值(整数), 加上一作为该 元素的下标(关键字) $arr=array(5=>"logo",567,90); //我要访问"logo"这个值 echo $arr[5]; echo "<br/>".$arr[6]; ?如果我们给某个元素的下标一样,则会覆盖原来的值: $arr=array(5=>"logo",567,90); //我要访问"logo"这个值 $arr[5]="yes";//替换某个元素值 echo $arr[5]; echo "<br/>".$arr[6]; ? 如果我们使用true ,false null 作为key, 则应当怎样访问 $arr[true]="hello"; //==> $arr[1] $arr[false]="world";//==> $arr[0] $arr[null]="北京";//==> $arr[null] 或者 $arr[""]; //null<==>"" echo $arr[0]; echo "<br/>".$arr[null]; ? //我们通常可以使用print_r来显示这个数组情况 print_r($arr); echo "<br/>"; //var_dump可以更加详细的显示数组的信息 var_dump($arr); ? 访问数组的时候,不要越界比如: $arr=array(56,100,101); echo $arr[2];//数组越界 echo "hello"; 一维数组的引用 基本语法: $数组名[键值]; 如果你写的键值不存在,则会报告: Notice: Undefined offset 一维数组使用陷阱 //*****一维数组引用陷阱 $arr[bar]="hello,world"; echo $arr[bar]; 这样使用时危险!!!! php的数组可以动态的增长 $a=array(2,3); //这里说明php的数组是可以动态增长. $a[3]=56; echo $a[2]; php的数组相关的函数说明 ? count 函数 基本用法是 count($数组名); 可以统计该数组共有多少元素. ? is_array ? print_r 和 var_dump ? explode 对字符串进行分割 案例: $str="北京&顺平&天津&宋江&林冲"; //在实际开发中,涉及到字符串的拆分,可以考虑 $arr=explode("&",$str); print_r($arr); php数组遍历的四个方法 ? 如果使用 for while do..while 要确定该数组的下标是从 0开始顺序排放 $colors = array('red', 'blue', 'green', 'yellow'); //for while do_while //for for($i=0;$i<count($colors);$i++){ echo "<br/>".$colors[$i]; } //while $i=0;//循环控制变量 while($i<count($colors)){ echo "<br/>".$colors[$i]; $i++; } //do..while $i=0;//循环控制变量 do{ echo "<br/>".$colors[$i]; $i++; }while($i<count($colors)); //foreach echo "<br/>*********"; foreach($colors as $k=>$v){ echo "<br/>$k=$v"; } 55讲 数组使用细节? 数组运算符 数组作业评讲? 数组小结 更新时间:2012年12月11日16时58分 来源: 使用unset函数可以销毁某个元素,也可以销毁某个变量,销毁该元素后,关键字不会重新组合. $arr[0]=123; $arr[1]=456; $arr[2]="hello"; //比如现在我要删除 $arr[1] 元素 echo "<br/>**删除前****"; echo $arr[1]; unset($arr[1]); echo "<br/>**删除后****"; echo $arr[1]; echo print_r($arr); 数组运算符(了解即可) $a = array("a" => "apple", "b" => "banana"); $b = array("a" => "pear", "b" => "strawberry", "c" => "cherry"); $c = $a + $b; //$b数组的键和值加到$a echo "$a + $b result<br/>"; var_dump($c); // "a" => "apple", "b" => "banana" "c" => "cherry" echo "<br/>"; $c = $b + $a; //"a" => "pear", "b" => "strawberry", "c" => "cherry" echo "$b + $a result <br/>"; var_dump($c); 数组的案例: 为加强大家对数组的理解,我们再给大家出一个题,我们一起完成.在运动会上,五个小孩比赛滑轮,他们的滑完100米,分别用 了10s、12s、5.7s、9s、14s,请编写一个程序,计算他们的平均时间?[array03.php] 时间保留到小数点后两位. <html> <head> <meta http-equiv="content-type" content="text/html;charset=utf-8"/> </head> <body> <h1>请输入五个小孩的成绩,用空格隔开</h1> <form action="result2.php" method="post"> <input type="text" name="grade"/> <input type="submit" value="开始统计"/> </form> </body> </html> result2.php <?php //接收用户提交的学生的成绩! $grades=$_REQUEST['grade']; //echo 'grade='.$grades; //拆分,对成绩进行分割 $grades=explode(" ",$grades); $allGrades=0; //遍历 foreach($grades as $k=>$v){ $allGrades+=$v; //隐藏转换 string->float } echo "平均时间是=".$allGrades/count($grades); ?> 如果我要求把两个页面合并到一起. 56讲 排序介绍 冒泡排序 更新时间:2012年12月13日10时04分 来源: 数组的排序 这里我们介绍一些常用的排序方法, 排序是一个程序员基本功, 所谓排序就是对一组数据,按照某个顺序排列的过程。 排序分两大类: l 内部排序 (1) 交换式排序法 ? 冒泡法 基本思想: 案例说明: <?php //简单的 $arr=array(0,5,-1); //这是一个中间变量 $temp=0; //我们要把数组,从小到大 //外层循环 for($i=0;$i<count($arr)-1;$i++){ for($j=0;$j<count($arr)-1-$i;$j++){ //说明前面的数比后面的数大,就要交换 if($arr[$j]>$arr[$j+1]){ $temp=$arr[$j]; $arr[$j]=$arr[$j+1]; $arr[$j+1]=$temp; } } } //输出 print_r($arr); ?> 为了更好使用排序,我们将其封装成一个函数:代码如下 : <?php //简单的 //现在我们把冒泡法封装成函数,利用以后使用 function bubbleSort(&$myarr){ //这是一个中间变量 $temp=0; //我们要把数组,从小到大 //外层循环 for($i=0;$i<count($myarr)-1;$i++){ for($j=0;$j<count($myarr)-1-$i;$j++){ //说明前面的数比后面的数大,就要交换 if($myarr[$j]>$myarr[$j+1]){ $temp=$myarr[$j]; $myarr[$j]=$myarr[$j+1]; $myarr[$j+1]=$temp; } } } echo "<br/>函数中的myarr数组"; print_r($myarr); } $arr=array(0,5,-1); //使用函数去排序 bubbleSort($arr); //输出 print_r($arr); ?> ? 从上面的案例我们可以看出 * 数组默认传递的是值,不是地址 57讲 选择排序 插入排序 快速排序 更新时间:2012年12月14日14时00分 来源: ? 快速排序法 快速排序法,我们就介绍了一个思想: ? 选择排序法 选择排序法的案例: 举例说明: function selectSort(&$arr){ $temp=0; for($i=0;$i<count($arr)-1;$i++){ //假设 $i就是最小的数 $minVal=$arr[$i]; //记录我认为的最小数的下标 $minIndex=$i; for($j=$i+1;$j<count($arr);$j++){ //说明我们认为的最小值,不是最小 if($minVal>$arr[$j]){ $minVal=$arr[$j]; $minIndex=$j; } } //最后交换 $temp=$arr[$i]; $arr[$i]=$arr[$minIndex]; $arr[$minIndex]=$temp; } } 自己分析流程. ? 插入排序法 排序思想: //插入排序法(小->大) function insertSort(&$arr){ //先默认下标为0 这个数已经是有序 //1. 知道思想->看懂代码->写(灵活) for($i=1;$i<count($arr);$i++){ //$insertVal是准备插入的数 $insertVal=$arr[$i]; //准备先和$insertIndex比较 $insertIndex=$i-1; //如果这个条件满足,说明,我们还没有找到适当的位置 while($insertIndex>=0&&$insertVal<$arr[$insertIndex]){ //同时把数后移 $arr[$insertIndex+1]=$arr[$insertIndex]; $insertIndex--; } //插入(这时就给$insertVal找到适当位置) $arr[$insertIndex+1]=$insertVal; } } 从效率上看. 冒泡法< 选择排序法 < 插入排序法 快速排序法.[空间和时间] 58讲 顺序查找 二分查找 更新时间:2012年12月16日20时58分 来源: 从效率上看. 冒泡法< 选择排序法 < 插入排序法 快速排序法.[空间和时间 外部排序 (文件..) 因为数据量大,必须借助外边文件来完成. 查找 我们这里给大家介绍 两种 ? 顺序查找 对某个数组,安装顺序,一个一个比较,然后找到你要的数据. 案例: 要求从一个数组 $arr=array(46,90,900,0,-1)中查找一个 数 34,如果查找则输出该数的下标,如果找不到,则输出,查无此数 代码: //要求从一个数组 $arr=array(46,90,900,0,-1)中查找一个 数 34,如果查找则输出该数//的下标,如果找不到,则输出,查无此 数 $arr=array(46,90,900,0,-1,-1); function search(&$arr,$findVal){ $flag=false; for($i=0;$i<count($arr);$i++){ if($findVal==$arr[$i]){ echo "找到了,下标为=$i"; $flag=true; //break; } } if(!$flag){ echo '查询不到'; } } search($arr,-1); ? 二分查找法(必须掌握) 所谓二分查找,它有一个重要的前提, 该数组本身已经是一个有序数组. 如果该数组不是有序的,则必须先排序再查找 代码伺候: //二分查找函数 function binarySearch(&$arr,$findVal,$leftIndex,$rightIndex){ //当 $rightIndex>$leftIndex 说明没有数 //为什么 if($rightIndex<$leftIndex){ echo "找不到该数"; return ; } //找到中间这个数 $middleIndex=round(($rightIndex+$leftIndex)/2); //如果大于则,向后面找 if($findVal>$arr[$middleIndex]){ binarySearch($arr,$findVal,$middleIndex+1,$rightIndex); } //如果是小于中间这个数,则向前面找 else if($findVal<$arr[$middleIndex]){ binarySearch($arr,$findVal,$leftIndex,$middleIndex-1); }else{ echo "找到这个数 下标是 $middleIndex"; } } 59讲 多维数组 数组作业评讲? 更新时间:2012年12月17日14时55分 来源: 多维数组-二维数组(了解) 二维数组的基本语法: $arr=array( array(1,2,3), array(5,6,9) ); $arr[0]=array(1,0); 二维数组,地图 ... 二维数组在内存中存在的形式: 快速入门案例: 请用二维数组,输出如下图形 0 0 0 0 0 0 0 0 1 0 0 0 0 2 0 3 0 0 0 0 0 0 0 0 //定义一个二维数组 $arr=array( array(0,0,0,0,0,0,1), array(0, 0, 1, 0 ,0 ,0,5), array(0 ,2 ,0, 3, 0, 0,90), array(0,0,0,0,0,0,100)); //遍历二维数组(行) for($i=0;$i<count($arr);$i++){ //遍历每行的数据 for($j=0;$j<count($arr[$i]);$j++){ echo $arr[$i][$j]." "; } echo "<br/>"; } echo "<br/>".$arr[2][3]; 所谓矩阵转置: (行和列互换) 目前有一个二维数组 1 2 3 4 5 6 转置 作业评讲 ? 1( 打印如下图型: ********* ********* ********* ********* ********* ********* 2( 打印如下图型: * ** *** **** ***** 3( 打印如下图型: * *** ***** ******* ********* 2. 空心金字塔 3. 空心菱形 定义一个函数 function printTest($n,$name){ } view.php <html> <head> <meta http-equiv="content-type" content="text/html;charset=utf-8"/> </head> <form action="homework01.php" method="post"> 请输入层数:<input type="text" name="layer"/><br/> 请选择形状: <select name="shape"> <option value="a">矩形</option> <option value="b">半金字塔</option> <option value="c">金字塔</option> <option value="d">金字塔</option> <option value="e">金字塔</option> </select><br/> <input type="submit" value="打印"/> </form> </html> homework01.php <?php //死去活来 //$n表示层数 $n=$_REQUEST['layer']; //"a"->表示矩形 "b"=>一半金子塔 "c"=>完整的金字塔 $shape=$_REQUEST['shape']; $starNum=5; //swtich function printShape($n,$shape,$starNum=5){ switch($shape){ case "a": for($i=1;$i<=$n;$i++){ for($j=1;$j<=$starNum;$j++){ echo "*"; } //打完一层后,换行 echo "<br/>"; } break; case "b": for($i=1;$i<=$n;$i++){ for($j=1;$j<=$i;$j++){ echo "*"; } echo "<br/>"; } break; case "c": break; } } //调用 printShape($n,$shape); ?> 1. 已知手掌游戏机一台320元,mp3一台260元。 公司举行抽奖大会,公司有18人,一等奖游戏机,二等奖mp3, 购入5台游戏机,13台mp3。 问总价为多少,公司实际平均给每人花费了多少钱。(4980,276.6666) <?php $gamerPrice=320; $mp3Price=260; $gamerNum=5; $mp3Num=13; $totalPrice=$gamerPrice*$gamerNum+ $mp3Price* $mp3Num; $avgPrice= $totalPrice/ 18; ?> 1. 跳水比赛,8个评委打分。运动员的成绩是8个成绩取掉一个最高分,去掉一个最低分,剩下的6个分数的平均分就是 最后得分。使用一维数组实现打分功能。 解题: <?php $arr=array(90,23,89,100,2,5,89,44); //这里有一个思路,如果只想知道最低分和最高分是多少,则可以排序. //找出给出最低分的裁判 //该函数可以返回给出最低分的裁判的下标 function findMin($arr){ //假设第一个人就是给出最低分的裁判 $minFen=$arr[0]; $minIndex=0; for($i=1;$i<count($arr);$i++){ //如果下面条件成立,说明$i 裁判给出的成绩更低 if($minFen>$arr[$i]){ $minFe=$arr[$i]; $minIndex=$i; } } return $minIndex; } ?>
信息发布:广州名易软件有限公司 http://www.myidp.net
|