php文档知识点整理(函数方法文件加载)

Posted 邹少聪

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了php文档知识点整理(函数方法文件加载)相关的知识,希望对你有一定的参考价值。

函数:

函数定义形式:

 

function  函数名 (形参1,形参2.... ){

}

函数参数:(2种)

形参:

 

1,形参一定是一个变量名!

 

2,该变量名只能是在该函数中有效的变量名;

 

3,而且只在该函数调用并执行时有效,函数结束,通常这些变量也就“销毁”。

实参:

 

实参就是一个“实际数据”,

 

该数据可以是一个“直接数据”(比如5”abc”),也可以是一个变量中存储的数据。

 

实参的作用是将其数据“赋值给”形参变量。

 

实参跟形参之间通常应该有个一一对应”关系:

 

定义形式:   function  函数名(形参1,形参2...... ){ 。。。。}

 

 

 

调用形式:    函数名(实参1,实参2.....

默认值参数:

注意:

 

默认值不能是对象或资源类型;

 

默认值只能是常量表达式,或常量,不能是变量

 

定义时可以不给定形参,但调用时,却又可以给定任何个数的实参。

在系统中,var_dump()这个函数也有同样的使用效果:

var_dump($v1);

var_dump($v1, $v2, $v3); //也可以

这种应用的实现,是依赖与系统中的3个系统函数来达到的:

func_get_args(); //获得一个函数所接收到的所有实参数据,并结果是一个数组

func_get_arg(n); //获得一个函数所接收到的第n个实参数据(n0开始)

func_num_args(); //获得一个函数所接收到的所有实参数据的个数

 

定义函数:

 

function  &函数名(形参1,形参2.....) //注意函数名前有个引用符号“&

 

{

 

$result = 0; //初始化

 

。。。。。。。

 

return $result; //此时返回数据,只能是变量

 

}

匿名函数:

表现1

$f1 =  function(){。。。函数体;}

//这里的匿名函数定义形式上没有名字,但其实又将之赋值给了变量$f1

使用时,就跟“可变函数”一样了:$v1 = $f1();

 

表现形式2

 

调用其他函数2匿名函数,实参1,实参2...... );

 

说明:

 

1此形式的匿名函数只有定义的函数体(无函数名)

 

2此形式的匿名函数只能作为其他函数调用时的参数(其他函数通常有特定用处)

 

3此匿名函数会在调用其他函数的“过程中”被执行。

 

能够使用(匿名)函数当作实参的函数,并不多!

 

其中有一个常见的是:call_user_func_array();

 

其使用形式为:

 

call_user_func_array(匿名函数,数组);

 

含义:

 

将数组的每一项当作该匿名函数的若干个实参,传递到该匿名函数中,并执行该匿名函数,并可以从该匿名函数中返回数据。

变量的作用域:(4个)

 

通常说作用域,有2个:

 

局部作用域:只能在所定义的函数范围内使用。

 

全局作用域:在函数的“外部”范围使用。

 

——php中,局部和全局作用域是不重叠的

 

——js中,全局作用域是包括局部作用域的

 

 

 

但还有两个:

 

超全局:就是在函数的内部和外部都可以使用。

 

超全局变量只有系统内部预定义的那几个,我们不能再程序中创建超全局变量。

 

静态局部作用域:其实也是局部,但多一个特征:数据能够在函数退出后仍然保持不丢失。

局部访问全局变量的特定语法:

在局部范围内,使用global关键字对全局变量进行一次“声明”,则就可以使用了:

语法:global  $变量名;

 

实际上,函数中的global 语句,其实是创建了一个跟外部变量同名的局部变量,并通过“引用”的方式指向了外部变量的数据区

 

 

 

 

1 <?php
2     $v1=10;
3     function f3(){
4         global $v1;
5         echo "<br />v1 = $v1";
6         $v2=20;
7     }
8     f3();
9 ?>
举例

 

$GLOBALS:

在函数中(局部范围),使用$GLOBALS超全局数组来引用(使用)全局变量:

 

$GLOBALS超全局数组的作用是用于存储所有全局变量的数据:变量名为下标,变量值为对应元素值。

全局访问局部变量的特定语句:

通过引用传递的方式向形参传递一个引用实参变量

$v1 = 10;

function  f1( &$p1, $p2){ ...... } //$p1是函数的形参,也即就是函数的内部(局部)变量

$v2 = f1( $v1, 10); //此时我们认为$v1就可以使用函数中$p1的值。

使用函数的引用返回形式:见前面引用传递的方式返回数据

函数中使用global关键字来首次引用一个全局变量,则函数结束后在全局范围就可以使用该变量了

 

有关函数的系统函数:

function_exists():判断某个函数是否被定义过,返回布尔值

if(  function_exists(“ func1 “)  == false ){

function  func1(){。。。。。。}//定义函数

}

func_get_arg(n):获得一个函数的第n个实参值(n从0开始)

func_get_args():获得一个函数的所有实参,结果是一个数组

func_num_args():获得一个函数的所有实参的个数。

有关函数的编程思想:

递归思想的一个基本形式是:在一个函数中,有至少一条语句,又会去调用该函数自身。

递归思想(递归函数)

1,很多问题,用递归和递推都可以解决。

2,有些问题只能用递归。

3,如果两种方法都可以解决,推荐使用递推——效率高很多!

 数组:

 

php中,数组的下标可以是整数,或字符串。

 

php中,数组的元素顺序不是由下标决定,而是由其“加入”的顺序决定。

 

 

多维数组的一般语法形式:

 

$v1 = 数组名[下标][下标][.....]

 

数组遍历:

foreach( $arr   as   [ $key  => ] $value ) //$key可以称为键变量,$value可以称为值变量。

{

//这里就可以对$key  $value 进行所有可能的操作——因为他们就是一个变量

//$key 代表每次取得元素的下标,可能是数字,也可以能是字符串

//$value 代表每次取得元素的值,可能是各种类型。

//此循环结构会从数组的第一项一直遍历循环到最后一项,然后结束。

}

数组指针和遍历原理:

 

举例:$arr1 = array(2=>1,  ‘dd’=>5,  1=>1.1,  “abc”,  0=>true)

下标:

2

‘dd’

1

3

0

值:

1

5

1.1

‘abc’

true

指针除了负责foreach循环的位置设定之外,还有其他一些函数也依赖于该指针:

1$v1 = current( $arr1); //取得$arr1中当前指针所指向的元素的值,如果没有指向元素,则为false

2$v1 = key$arr1); //取得$arr1中当前指针所指向的元素的下标,。。。。。false

3$v1 = next($arr1 ) //将指针移向“下一个元素”,然后取得该下一个元素的值;

4$v1 = prev($arr1) //将指针移向“上一个元素”,然后取得该上一个元素的值

5$v1 = reset($arr1); //将指针移向“第一个元素”,然后取得该元素的值——数组指针初始化

 

6$v1 = end($arr1); //将指针移向“最后一个元素”,然后取得该元素的值

 

7$v1 = each($arr1) //取得当前元素的下标和值,然后移动指针到下一个位置。

 

for+next+reset遍历数组:

reset( $arr1 ); //重置数组,即:数组指针初始化,这里,返回的数据被“丢弃”了。

$len = count( $arr1);

for$i = 0;  $i < $len  $i++){

$key = key ($arr1 ); //下标

$value = current( $arr1 ); //

//然后这里就可以对$key $value进行任何作为变量的操作

next($arr1);//这里,移动指针到下一个元素(也同时丢弃了返回值)

}

while+each()+list()遍历数组:

each()函数解释:

each()函数可以取得一个数组中的一个元素的下标和值,然后再放入一个新的数组中,并且指针后移一位。

该新的数组,有4个元素,但存储的是下标和值的“双份”,类似下述形式:

array(

1 => 取出来的值,

‘value’ = >取出来的值,

0 = > 取出来的下标(键名),

‘key’ => 取出来的下标(键名)

);

 

list()函数解释:

使用形式:

list($v1, $v2, $v3,$v4 .... = 数组$arr1;

其作用是:依次取得数组$arr1中下标为0123, ....的元素的值,并一次性放入多个变量中(一一对应)

即其相当于如下语句:

$v1 = $arr1[0];

$v2 = $arr1[1];

$v3 = $arr1[2];

$v4 = $arr1[3];

..........

但是注意:只能实现这样的“从0开始的连续数字下标的元素的取值”(但并非要求数组的元素的顺序为同样的数字顺序)

 

foreach默认是原数组上进行遍历。但如果在遍历过程中对数组进行了某种修改或某种指针性操作(就是指前面的指针函数),则会复制数组后在复制的数组上继续遍历循环。

 1 <?php
 2 //    $arrpao = array(8,10,26,15,30,13);
 3 //    $changdu = count($arrpao);
 4 //    echo "<br>排序之前";
 5 //        var_dump($arrpao);
 6 //    for($i=0;$i<$changdu-1;++$i){
 7 //        $max =$arrpao[0];
 8 //        $xia =0;
 9 //        for($k=0;$k<$changdu-$i-1;++$k){
10 //            if($arrpao[$k]>$arrpao[$k+1]){
11 //                $a = $arrpao[$k];
12 //                $arrpao[$k]=$arrpao[$k+1];
13 //                $arrpao[$k+1]=$a;
14 //            }
15 //        }
16 //    }
17 //    echo "<br />排序之后:";
18 //    var_dump($arrpao);
19 ?>
冒泡案例

 

 

 

 

 

 

 

 

 

 

 

 

 

文件加载

1.有4个文件加载的语法形式(注意,不是函数):

include ,   include_once ,   require ,  require_once;

 

1,如果加载文件失败,则有不同的处理规则;includerequire不同

 

2,如果加载文件重复,则有不同的处理规则;XXXXXX_once不同;

 

3,他们都是语法结构,而非函数,使用形式可以有两种:

 

3.1  include +  ‘文件路径’;    或者  include + (‘文件路径’);

文件路径问题:(有3种)

1.相对路径

 

相对路径就是以./”, 或“../”,开头的路径。

 

./ 表示当前网页文件的所在位置(文件夹,目录);

 

../ 表示当前网页文件的所在位置的上一级位置(文件夹,目录)

 

/   表示根目录文件

 

这种相对位置对一个网站中的所有内容(包括phphtml,图片,cssjs文件)都有效。

2.绝对路径(2种)

 

1.本地绝对路径:

 

window系统: c:/d1/d2/page3.php

 

unix系列系统: /d1/d2/page3.php

 

2.网络绝对路径: http://www.abc.com/d1/d2/page4.php

3.只有文件名(无路径)

 

1.在php.ini配置文件中,有:include_path设定:

 

我们也可以在脚本中设定:

设置载入文件:set-include-path(‘文件路径’)

获取载入文件:get-include-path(‘文件路径’)

我们也可以使用另一个函数来获取当前的include_path的值:

 

2,上面没找到,在当前执行的网页文件所在目录(所谓当前工作目录)查找:

所谓当前网页文件,就是地址栏中显示的那个文件名。

3,上面还没找到,则在当前include命令所在文件的所在目录中查找:

如果一个文件(A)包含文件B,在文件B中又有include命令包含文件C

此时B中的路径问题就可能发生这种情况。

文件载入执行过程

1.从include语句处退出php脚本模式(进入html代码模式)

2.载入include语句所设定的文件中的代码,并执行之(如同在当前文件中一样)

3.退出html模式重新进入php脚本模式,继续之后的代码

1 <?php
2     echo "<p>代码(1)</p>"  
3 ?>
4     include \'文件路径\'
5 
6 <?php
7     echo "<p>代码(1)</p>"  
8 ?>
举例:

四种加载方法的区别:

1.include_once 和include的区别:前者能够保证不会被重复加载

2.require 和 include的区别:

如果被包含文件不存在,即引用失败(出错)时,include发出警告并继续执行后续代码require直接终止。

require_once 和 require的区别:前者能够保证不会被重复加载。

return关键字

 

return的作用是:结束函数,并可以返回数据;

 

 1 1.<?php
 2     echo "<p>主文件中第一行</p>";
 3 
 4     include\'header2.php\';
 5 
 6     echo"<p>主文件中第2行</p>";
 7 ?> 
 8 
 9 
10 2.<?php
11     echo "header2中第一行<br />";
12     echo "header2中第2行<br />";
13     return;
14     echo "header2中第3行<br />";
15 ?>
举例 两个PHP中

 

结果:

 

return返回值的形式:

 

1.<?php
    echo "<p>主文件中第一行</p>";
    $n = include \'header2.php\';//将加载文件执行的结果返回给$n
    echo "<p>主文件中第2行</p>";
    echo "<p>主文件中 n =$n </p>";
?>




2.<?php
    $m = 10;
    echo "header2中第一行<br />";
    echo "header2中第2行<br />";
    return $m;
    echo "header2中第3行<br />";
?>
举例 2个php

结果:

错误处理

 

语法错误:

 

程序没法运行,直接提示语法错误。

 

 

 

运行时错误:

 

只有程序运行到某行,或在某些特定的情形下运行才会发生的错误。

 

 

 

逻辑错误:

 

程序从头到尾运行都没有发生(并提示)错误,但程序运行计算的结果是错误的。

 

 

 

我们程序员主要面对的和要处理(应付)的错误,就是运行时错误。

系统错误:

 

E_ERROR:系统严重错误

 

一发生,程序立即停止执行。

 

该错误一般希望马上。

 

E_WARNING:系统警告

 

一发生,提示错误,并继续执行。

 

通常该错误希望能够在“下一工作日”去处理掉(解决)。

 

E_PARSE:语法错误

 

一发生,提示错误,而且代码完全不会运行——在运行之前先检查语法。

 

E_NOTICE:系统提示

 

一发生,提示错误,并继续执行。

 

发个邮件通知一下,自己安排时间有空去解决。

他们的本质是:

1 <?php
2 echo "<br />E_ERROR = ".E_ERROR;    
3 echo "<br />E_WARNING = ".E_WARNING;    
4 echo "<br />E_PARSE = ".E_PARSE;    
5 echo "<br />E_NOTICE = ".E_NOTICE;    
6 ?>
他们的本质:

可见他们只是一个系统内部常量(整数常量);

用户自定义错误:(3个)

E_USER_ERROR;

 

E_USER_WARNING;

 

E_USER_NOTICE;

 人工触发:

 

trigger_error(“错误提示”  用户错误代号);

错误的显示控制:

设定是否显示:display_error:

php.ini中;display_error = On; //表示显示, Off表示不显示;

 

以上是关于php文档知识点整理(函数方法文件加载)的主要内容,如果未能解决你的问题,请参考以下文章

PHP项目开发经验整理

《CURL技术知识教程》系列分享专栏

php基础知识(文件加载include)

超级有用的9个PHP代码片段

LINQ to XML - 从文件加载 XML 片段

jquery知识点整理