[关闭]
@javalaw2010 2015-08-17T11:47:26.000000Z 字数 2672 阅读 1195

PHP基础补充1.2

PHP




函数

  1. PHP中的函数不支持重载(弱语言类型)
  2. 函数与变量

    局部变量:在函数内部声明的变量,作用域仅限于函数内部,在外部使用该变量是非法的;
    全局变量:在函数外定义的变量,作用域从变量定义处开始到程序文件末尾结束;
    函数中无法直接调用全局变量,需要使用global关键字定义变量,或者使用$GLOBALS数组。

  3. 静态变量

  1. function test(){
  2. static $a = o; //静态变量使用static关键字修饰
  3. echo $a;
  4. $a++;
  5. }
  6. test(); //输出0
  7. test(); //输出1
  8. test(); //输出2

4.可变个数参数的函数

  1. function more_args(){ //不声明传入参数的个数,使用func_get_args()获取传入的参数
  2. $args = func_get_args();
  3. for($i = 0;$i<count($args);$i++){
  4. echo $args[$i];
  5. }
  6. }
  7. //或者使用以下的形式
  8. function more_args(){
  9. for($i = 0; $i<func_num_args();$i++){ //使用func_num_args()返回参数的总数
  10. echo func_get_arg($i); //使用func_get_arg()返回指定的参数
  11. }
  12. }

回调函数

  1. 变量函数
  1. function one($a,$b){ //定义一个函数
  2. return $a+$b;
  3. }
  4. $result = "one"; //将函数名作为字符串赋值给字符串变量
  5. echo $result(2,3); //使用字符串变量+`()`调用函数

2.使用变量函数声明和应用回调函数

  1. function filter($fun){
  2. for($i = 0;$i<= 100;$i++){
  3. if($fun($i)) //变量函数调用
  4. continue;
  5. echo $i.' ';
  6. }
  7. }
  8. function one($num){ //如果参数是3的倍数就返回true,否则返回false
  9. return $num%3 == 0;
  10. }
  11. filter("one");

3.借助call_user_func_array()自定义回调函数

  1. function fun($str1,$str2){
  2. echo $str1.$str2;
  3. }
  4. call_user_func_array('fun',array('LAMP','PHP'));

4.类静态函数和对象的方法回调

  1. /*声明一个类demo,类中声明一个静态的成员方法fun() */
  2. class Demo{
  3. static function fun($str1,$str2){
  4. echo $str1.$str2;
  5. }
  6. }
  7. call_user_array(array("Demo",'fun'),array('LAMP','PHP'));
  8. /*第一个参数必须使用数组,数组需要指定两个元素,第一个元素为类名称,第二个元素为静态方法名称*/
  9. /*声明一个类demo,类中声明一个普通的成员方法fun() */
  10. class Test{
  11. function fun($str1,$str2){
  12. echo $str1.$str2;
  13. }
  14. }
  15. call_user_array(array(new Test(),'fun'),array('LAMP','PHP'));
  16. /*第一个参数必须使用数组,数组需要指定两个元素,第一个元素为对象的引用,第二个元素为静态方法名称*/

使用自定义的函数库

require(),include(),require_once(),include_once()
根据PHP手册所述:
requireinclude 几乎完全一样,除了处理失败的方式不同之外。require 在出错时产生 E_COMPILE_ERROR 级别的错误。换句话说将导致脚本中止而include只产生警告(E_WARNING),脚本会继续运行。

基于手册这样的描述,我个人认为一般情况下没有必要太过于纠结使用require还是include的问题。
然而我仍然会将这两个的不同点和适用情况收录进笔记中。

  • include执行文件时每次都要进行读取和评估,require只处理一次文件(实际上文件内容替换了require语句)
  • 可能执行多次的代码,使用require的效率比较高,每次执行代码时读取不同的文件,或者有通过一组文件迭代的循环,使用include较好。
  • include一般在流程控制区段中使用,而require一般在文件开头或者末尾使用。(但并非必须如此

数组

  1. 数组的声明:
    如果索引递增,可以使用如下的声明方式
  1. $arr[]='a'; //下标为0
  2. $arr[]='b'; //下标为1
  3. $arr[]='c'; //下标为2

如果没有指定索引值的元素与指定索引值的元素混在一起赋值,没有指定索引值的元素的默认索引值将紧跟指定索引值元素中的最高的索引值递增:

  1. $arr[]='a';//下标为0
  2. $arr[3]='b';//下标为3
  3. $arr[]='c';//下标为4

2.使用foreach遍历数组

  1. $arr = array('a','b','c');
  2. //第一种方式
  3. $num = 0;
  4. foreach($arr as $value){
  5. echo "$num:$value";
  6. $num++;
  7. }
  8. //第二种方式
  9. foreach($arr as $key => $value){
  10. echo "$key:$value";
  11. }

3.each(),list()while联合循环遍历数组

each()函数需要一个数组作为参数,返回当前的键值对,并将数组指针移动到下一个元素上,键值对返回有4个元素的数组,键名分别问,0,1,key,value,其中,0,key对应的值相同,1,value对应的值相同。当指针溢出时,返回false.

list()用一步操作给一组变量赋值:

  1. $info = array('coffee','brown','coffeine');
  2. list($drink,$color,$power) = $info;

结合起来使用while遍历数组:

  1. while(list($key,$value) = each(array_exception)){
  2. 循环体
  3. }
添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注