内 容 | 本周学习知识点: 一.PHP的循环结构
二.PHP函数的声明与使用
三.数组的定义以及遍历
四.常用的数组相关的函数
五.面向对象
六.三大特性以及修饰符、关键字
七.抽象类、接口、多态性
八.魔术方法,魔术常量
一.PHP循环结构分类: (1)While循环 语法格式: While(条件){ 如果条件成立,就执行{}里面的语句 执行结束后继续判断条件 //循环的条件避免死循环 } While嵌套循环,需要先把嵌套在内的循环执行完毕再执行外面的循环 (2)Do...while 循环 语法格式: Do{ 执行{}里面的语句 执行结束后继续判断条件 }while(条件); 区别: Do...while 循环: 一上来先执行,第二次再执行的时候判断条件是否成立 While循环: 则是先判断条件,如果条件成立则执行循环的代码 (3)For循环: For循环语法: For(exp1;exp2;exp3){ 表达式1:循环开始之前无条件赋值 表达式2:在开始循环之前判断条件,如果为true则执行,否 则停止循环 表达式3:每次循环结束求值 } 二.PHP函数的声明与使用 A.函数的特点: 函数都是由3部分组成:声明、函数名、函数体 1.所有PHP的函数都是由 function 来声明的 2.函数名是用来找到函数体的 3.函数只有被调用才能执行,可以在声明之前调用也可以在声明之后调用 4.可以通过向函数传递参数来改变函数的行为 5.参数分为:形式参数、实际参数: 定义函数的时候参数是 形式参数(形参),摆设 调用函数的时候才传递的参数是实际参数(实实在在起作用的) 6.函数的返回值使用return完成 7.函数一遇到return语句即结束,停止函数的执行 B.函数的优越性: 提高程序的重用性、可维护性、提高软件的开发效率 C.PHP变量的范围: 1.在函数中声明的变量就是局部变量,局部变量只能在函数中使用; 2.在函数外声明的变量称之为全局变量,全局变量只能在函数外部使用; 3.如果需要在局部范围内使用全局变量,使用 global或者$GLOBALS; 4.函数范围内的变量(局部变量)一旦函数执行完毕变量即被释放 D.PHP的静态变量: 1.静态变量只能在(函数、类中声明),不能在全局范围内声明 2.静态变量需要使用关键字 static 3.通常用于 统计服务器的浏览量 function demo(){ static $a = 10; $a++; echo $a.'<br/>'; } demo(); //11 demo(); //12 demo(); //13 作用:一个变量可以在同一个函数的多次调用中通用,静态变量只存在函数中 E.PHP变量函数: 变量函数:一个变量的值可以作为一个函数的名字 function test(){ $a=10; echo $a; } $var='test'; echo $var(); F.PHP函数的分类: 1.自定义函数 2.内建函数 2.1, 常规函数:copy()拷贝文件,移动文件,使用 rename()函数 $file='e:/g.txt'; $file_name='e:/g.txt.bak'; copy($file,$file_name); 2.2, 带有&符号的函数 表示引用赋值,函数将变量(参数)的值修改后,在其他地方使用该变量时,该变量的值也会发生改变 2.3, 带有[] 的函数 表示这个参数是可选的,如果你传值了,就使用你传递的,如果没有就使用默认的 2.4, 带有...参数的函数:可传任意参数 2.5, 回调函数 array array_filter(array$input[,callback $callback ] ) 用回调函数过滤数组中的单元 三.数组的定义以及遍历 A.特殊的流程控制语句 Break:指定break 跳出第几层循环 Break 1 代表 跳出第一层循环 Break 2 代表 跳出第二层循环 Continue:跳出本次循环,继续执行下一次循环 Exit:直接跳出当前脚本 B.数组:保存多个元素的集合 1. 每个元素都是由键(下标)和值组成 2. 单独访问某个元素时都是通过下标来访问值的 3. 数组的下标都是从0开始的 C.数组的声明 a.直接为数组元素赋值,使用 [] 1。如果不给出索引下标,就会从0开始 2。如果给出索引下标,下一个索引就会从最大的开始 +1 3。如果后面出现前面的下标,相当于给前面的下标重新赋值 4。数组下标会从最大的下标开始加1 b. 使用array()函数声明 1.使用array()函数声明的数组,默认是索引数组 2.如果为关联数组 或者 索引数组指定下标,使用 => c. 调用其他函数返回一个数组 file()函数,获得一个文件中的所有内容,返回一个数组 <?php $lines = file('http://www.example.com/'); foreach ($lines as $line_num => $line) { $html = implode('', file ('http://www.example.com/')); ?> D.遍历数组的方式 1. for循环遍历数组 前提是:下标必须是索引数组,而且下标必须是连续的 2. Foreach()循环遍历数组 循环次数是由数组元素个数决定,每次循环都会将数组元素赋值给后面的变量 语法: foreach($array as $value){ //每循环一次将数组元素的值赋给变量 循环体 } foreach($array as $key=>$value){ //每循环一次将数组的下标赋给$key将数组的值赋给$value 循环体 } 3. While(),list(), each()组合遍历数组 a.each()函数遍历数组 1. Each()函数遍历数组,需要一个数组作为参数,返回值也是数组 2. 返回的值只有 0 1 key value四个下标 0 和 key保存的是数组的下标 1和value保存的是数组的值 3. 默认当前元素就是第一个元素 每循环一次就会将当前的指针向后移动一位 如果已经是最后一个元素,再循环则返回false b.List()函数遍历数组 1. 需要将一个数组赋值给这个函数 2. 数组中的元素个数要和list()参数个数一致 3. 数组中的每个元素值会赋值给list()函数中的每个参数,list()函数将每个参数转为变量 4. list()只能接收索引数组,按索引下标的顺序接收 四.常用的数组相关的函数 A.预定义的超全局数组: 1. 系统预定义的,而且全局范围内自动生效 2. 用户不能自定义这些数组,只能使用 3. 在函数中不需要使用global声明 $_GET、$_POST、$_REQUEST、$_FILES、$_COOKIE、$_SESSION 、$_ENV、$_SERVERS、$GLOBALS a.GET、POST 提交的区别: 1,安全性:由于GET方式是通过在地址栏传递数据,安全性低 建议:机密信息使用GET方式 2,GET方式传递的数据量小,不能大于2KB,POST方式默认不受限制 $_REQUEST既可以获得GET 方式提交的数据 又可以获得POST方式提交的数据,但是$_REQUEST没有针对性,效率低,如果能保证请求时使用的是什么方式,尽量使用对应的方式获取 b.$_ENV和计算机的环境相关的变量 COMPUTERNAME 计算机名称 Path 环境变量 OS 操作系统 SystemRoot 系统根目录 c.$_SERVER和服务器相关的变量 DOCUMENT_ROOT服务器根路径 SERVER_ADDR 服务器的IP地址 SERVER_NAME服务器端的主机名 REMOTE_ADDR 浏览当前页面的用户的IP地址 REMOTE_HOST 浏览当前页面的用户的主机名 SERVER_PORT Web服务器使用的端口 d.$GLOBALS全局作用域中的所有变量,下标名称就是全局变量名 B.数组键、值相关的函数 Array_values() 返回数组中所有的值,并返回数字索引 Array_keys() 返回数组中所有的键名,如果指定第二个参数,只返回该值的键名;如果指定第三个参数 为true,则进行全等比较 In_array() 判断数组中是否存在某个值,如果有第三个参数代表全等匹配 Array_key_exists检查给定的键名或索引是否存在于数组中 Array_flip()交换数组中的键和值 Array_reverse()返回一个顺序相反的数组 C.数组统计函数 count() 的别名sizeof() :获得数组的元素个数;count 如果有第二个参数,递归的返回元素个数 Array_unique() 移除数组中重复的值 D.使用回调函数过滤数组 array_filter() 用回调函数过滤数组中的单元 array_walk() 对数组的每个成员应用用户函数 array_map() 对数组的每个元素身上做处理之后再返回新的值,第一个参数是回调函数;第二个参数为数组 E.数组排序函数:(r逆向排序;a保持索引关系;u用自定义函数排序;k对键值排序) sort()对数组的值进行排序 rsort() 对数组进行逆向排序 usort()用用户自定义的比较函数对数组中的值进行排序 asort()对数组的元素按照值排序 arsort()对数组的元素值按照逆向排序 uasort()使用用户自定义的比较函数对数组中的值进行排序并保持索引关联 ksort()对数组的元素按照键名进行排序 krsort() 对数组的元素按照键名进行逆向排序 uksort() 使用用户自定义的比较函数对数组中的键名进行排序 natsort()保持原有的键/值 关联(区分大小写) natcasesort() 对数组进行不区分大小写的排序 F.拆分、合并、分解的数组函数 array_slice() 从数组中取出一段 array_splice() 把数组的一部分去掉并用其他值取代 array_combine() 合并数组,用一个数组的值作为其键名,另一个数组的值作为其值 array_merge() 合并数组,将一个数组的值附加在另一个数组的后面 array_intersect() 计算数组的交集 包含在第一个数组并且也在第二个数组中的元素,注意保留键名 array_diff() 计算数组的差集(保留了所有在第一个数组,但是不在其他数组中的值) G.数组和数据结构函数 1. 使用数据实现 堆栈(先进后出) array_push() 入栈,对数组的尾部 array_pop() 出栈,对数组的尾部 2. 使用 队列 (先进先出) array_shift() 出栈,对数组的头部 array_unshift() 入栈,对数组的头部
3. 其他数据相关的函数 array_rand() 随机获得数组下标 shuffle() 打乱数组元素 array_sum() 计算数组所有元素的和 range() 建立一个包含指定范围单元的数组 五.面向对象 从PHP 5开始,引入面向对象程序设计 面向对象:程序的最小单元,对象/类 面向过程:程序的最小单元是函数 php程序设计的思想===>>面向过程 A.类、对象、以及类和对象之间的关系 类可以比喻成 模子,不同的模子可以造出不同形状的食物,同样的 道理,不同的类 可以实例化不同的对象。 类---->实例化出来的就是对象。 对象的实例化:只有对象才在内存中占有空间 实例化对象就是指---将抽象的东西----转换成实实在在的例子 使用new新建一个对象,new 类名,创建那个类的对 对象的使用:对象中的成员必须通过对象的引用来访问 $对象->成员属性 $对象->成员方法 B.类的声明 1.Class 类名{ 成员属性:外观、颜色 成员方法:(功能)打电话、发信息} 2.类声明成员属性时:前面必须有修饰词,如果不知道使用哪个修饰词时,就使用var 3.在PHP的面向对象中,默认是public,在任何地方都可以访问 4.private:私有的 (在本类中访问) protected受保护的 (可在子类中访问) C.对象访问成员 对象中,访问其他的成员,在对象的内部,都默认有一个$this关键字,代表对当前对象的引用 D.构造方法(构造器) 1.实例化一个对象的时候,会自动的首先调用类的构造方法 2.构造函数初始化值 E. 析构方法 当对象被释放之前,自动的调用的方法,(当关闭一些资源时,做一些清理工作) 六.大特性以及修饰符、关键字 A.封装性 1,将自然实体的特征(属性)、能力,使用计算机面向对象的语言去描述,将自然语言抽象成计算机语言的过程 2,将实体的属性和方法封装到我们类的内部时,应该尽量的隐藏对象内部的细节 3,任何属性都不应该是公共的,如果需要我们访问或编辑此属性的值的话,需要给用户提供有限的接口(公共的方法)来完成 在PHP的面向对象中,默认是public,在任何地方都可以访问 使用private 关键字对属性和方法进行封装,只能在对象的内部进行访问,不能在外面进行访问 B.继承性:用子类去扩展父类 1.C++属于多继承,同一个类可以有多个父类 2. PHP和Java属于单继承,同一个类只能有一个父类 C.继承性的使用: 1.如果两个或两个以上的类中,有公共的部分就可以共享,共享的部分就可以作为父类 2.如果在父类中修改一个属性或功能,在所有的子类中的成员都会发生变化 3.声明一个子类,使用extends 关键字去继承(扩展)一个父类; 子类可以继承父类所有的内容,包括成员属性和成员方法、构造方法....如果子类有构造方法,就是用自己的,如果没有继承自父类 D.访问类型控制 1.子类可以继承自父类所有的内容,但是private的成员只能在本类中使用,子类中也不能使用 2.protected既可以让自己类的内部访问,又可以让子类访问,但是在类的外部不能访问 3.在PHP的面向对象中,默认是public,在任何地方都可以访问 E.子类对父类方法的重载: 1.子类可以声明 和 父类相同的方法名,即子类覆盖父类中同名的方法 2.子类的方法对父类的扩展:在子类中调用父类中被覆盖的方法 3.父类名::父类方法 如果父类名修改了,需要都得修改,所以在子类中可以使用parent,代表父类 F. :: 范围解析操作符 :: 范围解析操作符,通过类访问类的成员,只能访问类中的 常量、方法、或者静态成员 G.定义类文件 子类中编写构造方法,如果父类中也有构造方法,一定要去调用一次父类中被覆盖的构造方法,因为父类中的构造方法可能有其他的作用 H.面向对象中的关键字 a.final关键字 1,final关键字不能修饰成员属性,只能修饰类和方法 2,用来限制类不被继承,方法不被覆盖 b.static关键字 static 关键字 可以修饰成员属性和成员方法,静态的数据保存在内存中 注意: 1. 在类内部访问成员属性,使用self关键字; 在类的外部访问,使用类名:: 2. 在非静态方法中不能访问静态方法,但静态能访问非静态方法 3. 静态方法不能使用对象去访问,也就没有对象,所以在静态方法中不能使用$this 作用:不用实例化对象,可以直接通过类来访问 c.const关键字 1. 类常量只能修饰成员属性 2. 类中声明常量使用 const关键字 3. 访问方式和static静态成员属性是一样的,(在类的外部使用 类 名::常量名,在类的内部使用 self::常量名) 4. 类常量必须在声明时就给初始值 5. 类常量的值只能为标量数据 七.抽象类、接口、多态性 A.抽象类、抽象方法 1.一个类中的方法没有方法体,即没有{},直接以分号结束,这个方法就是抽象方法,必须使用abstract修饰 2.一个类中只要有一个抽象方法,这个类就是抽象类,抽象类必须使用abstract修饰 3.抽象类不能实例化对象 B.抽象类的使用 1.使用抽象类就必须用一个类去继承抽象类,子类不能再是抽象类,而且必须重写/覆盖抽象方法 2.抽象方法没有方法体,但是子类必须继承,并且有方法体 3.定义一些规范,让子类按照这些规范实现自己的功能 C.接口:一种特殊的抽象类 抽象类 和 接口的作用是一样:因为PHP是单继承的,如果使用抽象类,子类继承了抽象类就不能再去继承其他的类了,如果既想继承抽象类,又想继承/其他的类,就需要使用接口 D.接口和抽象类的比较 1,作用相同,都不能创建对象,都需要子类去实现 2,接口的声明、实现方式 和抽象类不一样 3,接口中的所有方法必须是抽象方法(不使用abstract修饰) 4,接口中的成员属性,只能声明常量 5,接口中的成员访问权限,都必须是public,抽象类中最低的权 限是protected 6,使用一个类去实现接口,不能是extends 而是implements 7,如果想让子类创建对象,子类必须实现接口的全部功能 E.接口继承 1.可以定义一个接口继承另一个接口 2.一个类可以实现多个接口(按多个规范去开发子类),多个接口使用,隔开 3.一个类可以在继承一个类之后,去实现一个或多个接口 4.如果想实例化子类的对象,必须完成接口提供的所有方法 F.多态性 让软件开发和维护时,达到充分的延伸性。事实上,多态最直接的定义就是让具有继承关系的不同类的对象,可以对相同名称的成员函数调用,产生不同的效果
八.魔术方法,魔术常量
//系统内置常量 魔术常量 echo __FILE__;//当前文件绝对路径 echo"<br/>"; echo __LINE__;//当前文件的行号 echo"<br/>"; echo PHP_VERSION;//php版本
__autoload() 当用到时自动加载函数 加载与自动加载案例: require'one.class.php'; require'two.class.php'; require'three.class.php'; $one=new one; $two=new two; $three=new three; echo '<pre>'; var_dump($one); var_dump($two); var_dump($three); echo'</pre>'; =============================== function __autoload($className){ require $className.'.class.php'; } $one=new one; $two=new two; $three=new three; echo'<pre>'; print_r($one); print_r($two); print_r($three); echo'</pre>';
|
学习总结: 一.While案例: 1,循环输出100次循环 2,用while循环输出一个1行99列的表格 3,实现隔行换色 步骤1:先绘制10行10列的表格 步骤2:各行换色 步骤3:鼠标移入变红色;鼠标移除恢复原来的颜色 <?php header("Content-Type:text/html;charset=utf-8"); $num = 0; echo '<table border=1 width="500px" align=center>'; echo '<caption><h1>while循环输出10行10列的表格</h1></caption>'; while($num<100){ if($num%10==0){ if($num%20==0){ $bg = '#ffffff'; }else{ $bg = 'silver'; } echo "<tr bgColor='$bg' οnmοuseοver=lrow(this) οnmοuseοut=arow(this)>"; } echo "<td>{$num}</td>"; $num++; if($num%10 ==0){ echo '</tr>'; } } echo '</table>'; ?> <script> var color = null; function lrow(obj){ color = obj.bgColor; obj.bgColor = 'red'; } function arow(obj){ //alert('out'); obj.bgColor = color; } </script> 二.For循环经典案例(九九乘法表): for($i=1;$i<10;$i++){ for($j=1;$j<=$i;$j++){ echo $i.'x'.$j.'='.($i*$j).' '; if($i==$j){ echo '<br/>'; } } } 三.回调函数 $arr=array(1,3,6,8,9); $new_arr=array_filter($arr,demo);//把参数传递进来之后再回过头去调用另外一个函数 function demo($array){ if($array>6){ return true; }else{ return false; } } print_r($new_arr); 四.Foreach()循环遍历数组 <?php $array=array( '市场部'=>array( array(1,'CEO','李开复','1000¥'), array(2,'总监','马腾化','1000¥'), array(3,'业务员','马云','1000¥'), ), '财务部'=>array( array(1,'CEO','马化腾','1000¥'), array(2,'总监','张朝阳','1000¥'), ), '技术部'=>array( array(1,'总监','比尔盖茨','1000¥'), ), ); ?> <html> <head> <meta charset='utf-8'/> </head> <body> <?php foreach($array as $key=>$value){ echo '<table align=center border=1 width=500>'; echo "<caption><h1>$key</h1></caption>"; echo '<tr>'; echo'<th>编码</th><th>姓名</th><th>职务</th><th>工资</th>'; echo '</tr>'; //$value二维数组,保存的是有多少个人 foreach($value as $k=>$v){ echo '<tr>'; //$v代表每一个人的那个数组 foreach($v as $iterm){ echo '<td align=center>'; echo ($iterm); echo '</td>'; } echo'</tr>'; } echo '</table>'; } ?> </body> </html> 五.While、list、each 1. $array=array('比尔盖茨','60','男'); $var=each($array); print_r($var); 2. $arr=array('name'=>'比尔盖茨','age'=>60,'sex'=>'男'); while($user=each($arr)){ echo $user['key'].'=>'.$user['value'].'<br/>'; } 3. list($name,$age,$sex)=array('比尔盖茨','60','男'); echo $name.$age.$sex; 4.$var=array('name'=>'比尔盖茨','age'=>60,'sex'=>'男'); while(list($key,$value)=each($var)){ echo $key.'==>'.$value.'<br/>'; } 六.数组相关函数 1./*** sort — 对数组排序 说明: bool sort ( array &$array [, int $sort_flags ] ) 本函数对数组进行排序。当本函数结束时数组单元将被从最低到最高重新安排。 **/ $array=array('Linux','Apache','MySql','PHP'); sort($array); print_r($array); 2./*** array_combine — 创建一个数组,用一个数组的值作为其键名,另一个数组的值作为其值 说明: array array_combine ( array $keys , array $values ) 返回一个 array,用来自 keys 数组的值作为键名,来自 values 数组的值作为相应的值。 如果两个数组的单元数不同或者数组为空时返回 FALSE。 **/ $arr=array('a','b','c'); $arr2=array(1,3,4); $result=array_combine($arr,$arr2); print_r($result); 七.面向对象连接数据库 class db{ //成员属性 var $hostname; //数据库的主机名 var $dbname; //连接的数据库名字 var $user;//用户名 var $pass;//数据库密码 //成员方法 function __construct(){ $this->connect(); //谁实例化的这个对象,$this就代表谁 }
function connect(){ $GLOBALS[‘$link’] = mysql_connect('localhost','root',''); mysql_select_db('csdn2013'); mysql_query('set names utf8'); //注意 utf8没有- $sql = "select * from process"; $result = mysql_query($sql); var_dump($result); } //当这个页面即将关闭的时候,需要断开一下数据库的连接 function __destruct(){ mysql_close($GLOBALS[‘$link’]); } } $db = new db; 八.多态的案例(USB): interface USB{ function mount(); //挂载功能 function work();//开始工作 function unmount();//卸载功能 } class Computer{ function UseUSB($usb){ $usb->mount(); $usb->work(); $usb->unmount(); } } class Upan implements USB{ function mount(){ echo '挂载成功,你可以使用<br/>'; } function work(){ echo 'USB设备开始工作<br/>'; } function unmount(){ echo '卸载成功<br/>'; } } class Worker{ function install(){ //找到电脑 $cm = new Computer; //拿过来一些设备 $Upan = new Upan; //$Fengshan = new Fengshan; //向电脑插入USB设备 $cm->UseUSB($Upan); } } $worker = new Worker; $worker ->install();
九.魔术方法案例: class person{ public $name; public $age; function __call($className,$arge){ //$person->say();不存在时自动调用__call()方法 echo $className.'不存在'; } function __construct($name,$age){ //构造方法 $this->name=$name; $this->age=$age; } function __clone(){ //克隆时自动调用 echo "我是克隆的,不是".$this->name; } function __toString(){ //对象不能输出,自动调用toString方法
echo '不能echo对象'; } } class man extends person{
} $person=new person('小白',22); $person->say(); $man=new man('夏小白',20); $man->age; $man2=clone $man; $man3=$man; echo'<pre>'; print_r($man); print_r($man2); print_r($man3); echo'</pre>'; //echo $person;//对象不能输出,调用toString方法
|
php常用的数组相关的函数及面向对象
最新推荐文章于 2021-01-28 13:42:00 发布