php常用的数组相关的函数及面向对象

本周学习知识点:

一.PHP的循环结构

 

二.PHP函数的声明与使用

 

三.数组的定义以及遍历

 

四.常用的数组相关的函数

 

五.面向对象

 

六.三大特性以及修饰符、关键字

 

七.抽象类、接口、多态性

 

八.魔术方法,魔术常量

 

 

 

一.PHP循环结构分类:

1While循环

     语法格式:

       While(条件){

          如果条件成立,就执行{}里面的语句

          执行结束后继续判断条件 //循环的条件避免死循环

        }

While嵌套循环,需要先把嵌套在内的循环执行完毕再执行外面的循环

2Do...while 循环

      语法格式:

        Do{

        执行{}里面的语句

        执行结束后继续判断条件

     }while(条件);

区别:

Do...while 循环

一上来先执行,第二次再执行的时候判断条件是否成立

While循环

则是先判断条件,如果条件成立则执行循环的代码

3For循环:

     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) {
 echo "Line #<b>{$line_num}</b> : " . htmlspecialchars($line) . "<br />\n";
}

  $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四个下标

            和 key保存的是数组的下标

            1value保存的是数组的值

       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.GETPOST 提交的区别:

    1,安全性:由于GET方式是通过在地址栏传递数据,安全性低

     建议:机密信息使用GET方式

2GET方式传递的数据量小,不能大于2KBPOST方式默认不受限制

$_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. PHPJava属于单继承,同一个类只能有一个父类

 C.继承性的使用:

   1.如果两个或两个以上的类中,有公共的部分就可以共享,共享的部分就可以作为父类

   2.如果在父类中修改一个属性或功能,在所有的子类中的成员都会发生变化

   3.声明一个子类,使用extends 关键字去继承(扩展)一个父类;

  子类可以继承父类所有的内容,包括成员属性和成员方法、构造方法....如果子类有构造方法,就是用自己的,如果没有继承自父类

     D.访问类型控制 

       1.子类可以继承自父类所有的内容,但是private的成员只能在本类中使用,子类中也不能使用

       2.protected既可以让自己类的内部访问,又可以让子类访问,但是在类的外部不能访问

       3.PHP的面向对象中,默认是public,在任何地方都可以访问

    E.子类对父类方法的重载:

      1.子类可以声明 和 父类相同的方法名,即子类覆盖父类中同名的方法

      2.子类的方法对父类的扩展:在子类中调用父类中被覆盖的方法

      3.父类名::父类方法

         如果父类名修改了,需要都得修改,所以在子类中可以使用parent,代表父类

F. :: 范围解析操作符

   ::  范围解析操作符,通过类访问类的成员,只能访问类中的 常量、方法、或者静态成员

G.定义类文件

  子类中编写构造方法,如果父类中也有构造方法,一定要去调用一次父类中被覆盖的构造方法,因为父类中的构造方法可能有其他的作用

H.面向对象中的关键字

    a.final关键字

      1final关键字不能修饰成员属性,只能修饰类和方法

          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循环输出一个199列的表格

   3,实现隔行换色

        步骤1:先绘制1010列的表格

        步骤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循环输出1010列的表格</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>

五.Whilelisteach

  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方法

 

 

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值