php函数基础(一)

php函数基础(一)

一.函数结构
 
1.构成部分: 
           关键字 function 
           函数名:get_sum
            参数列表:($a,$b)
            函数体:{}
            返回值:return $a+$b; 

      
php函数基础(一)           
2.函数命名规则:
  有效的函数名以字母或下划线开头,后面跟字母,数字或下划线,注意:不能用数字开头。
php函数基础(一)
 
3.返回值
    值通过使用可选的返回语句返回;
   可以返回包括数组或对象的任意字符;
    返回语句会终止函数的运行,并将控制权交回调用该函数的代码行。
 
4.形参,实参 –形参与实参是一一对应的;
        1>当实参数目小于形参数目时报错,给出警告信息,
        2>当实参数目多于形参数目时,截取和形参数目相等的参数,实参可以是表达式,可以是常量,变量
 
5.默认值
      如果调用函数时传递参数有值,实际参数代替默认值;如果没有值,函数体内使用默认 值;
    默认值只能是常量或表达式;不能是变量;
    如 function get_geece($is_formate=flase)
    或function  get_geece($is_formate=2-1)
           3.>默认值只能在形参的右边,否则报错
 
6.强类型参数
    一般情况,简单类型参数之间是可以相互转化的:
        1> 整型开头的字符串+数字=数字
         2> 浮点型开头的字符串+数字=数字
         3>字符串开头的串+字符串开头的串=0
强类型参数定义:为参数列表中的参数指定类型,如果如果传入的数据类型不匹配,则抛出TypeError异常。
   支持类型:
在php7.0中:支持int,float,bool,string
默认普通模式,开启严格模式,
declare(strict_types=1);  
 
7.可变参数列表
 
php函数基础(一)

//php5.5 或更早使用函数
function get_sum()
{
    $arg_num = func_num_args();
    $num = 0;
    if ($arg_num == 0) {
        return $num;
    } else {
//        var_dump(func_get_args() );
        foreach (func_get_args() as $arg) {
//            var_dump($arg);
            $num += $arg;
        }
        return $num;
    }
}
 

func_num_args(): 返回实参个数
func_get_arg(索引):  返回某一个实参,必须是实参数组的索引,索引从0开始
func_get_args():返回实参数组。
func_num_args函数功能– 返回传递到函数的参数数目,其语法如下 : int func_num_args (void )。
说明 : 返回传递到目前定义函数的参数数目。如果是从函数定义的外面来呼叫此函数,则func_get_arg( )将会产生警告。
func_num_args( )可以用来结合func_get_arg( )和func_get_args( )来允许使用者定义的函式接受variable-length参数列表。其中,func_get_arg( )从参数列表返回项目,其语法:int func_get_arg (int arg_num),传回定义函数的参数列表的第arg_num个参数,其参数从0开始。且函数定义的外面来呼叫此函数会产生警告;并且当arg_num大于函数实际传递的参数数目时亦会产生警告并返回FALSE。
func_get_args()函数和func_get_arg()函数的区别在于,func_get_args()函数传回一数组,数组的各个元素相当于是目前使用者定义函式的参数列的数目。
function get_num2(...$args){
    $sum=0;
    if (!$args){
        return $sum;
    }else{
        foreach ($args as $arg ){
            $sum += $arg;
        }
        return $sum;
    }

}
echo get_num2(3,4,5),"\n";

8.值传递和引用传递

传递数据类型:数值,对象,字符串,数组

值传递:单向传递,只能由实参传递给形参,而不能由形参传递给实参。内存中形参和实参存储在不同的空间,调用函数时,会给形参分配空间,实参将值传递给形参,调用函数完成后,形参释放空间,实参保留原来的值。

例子:值传递:形参$a,$b和实参$a1,$b1都开辟空间,$a和$b发生交换,但$a1和$b1空间不变化

php函数基础(一)
 

 

function swap($a,$b){
    $tmp=$a;
    $a=$b;
    $b=$tmp;
}

$a1=3;
$b1=5;
swap($a1,$b1);

echo "a:".$a1."b:".$b1;   //结果 a1=3,b1=5 
引用传递:形参没有开辟空间,直接在$a1,$b1空间上进行交换
function swap(&$a,&$b){
    $tmp=$a;
    $a=$b;
    $b=$tmp;
}

$a1=3;
$b1=5;
swap($a1,$b1);

echo "a:".$a1."b:".$b1; // 值发生交换,a1=5,b1=3

 

 
9.变量作用域
    
局部变量:在某个范围内有效,超出范围则无效
    1>在当前页面中声明的普通变量,不能在函数或者类中起作用;
    2>在当前页面中声明的普通变量,不能被传递到其他页面;
     3>在函数中声明的普通变量,在函数内部有效;
    4>在类中声明的属性,在类的内部有效;
 全局变量(global):
$GLOBALS 全局变量数组
   对于php而言,可以这么说,在页面中生成的变量都是全局变量,在整个页面都有效;但是不能被函数或者类中的方法访问。
$g_name = 'lxw';
function get_name()
{
    //将变量全局化 方法一:
//    global $g_name;
//    echo $g_name;

    //方法二:
    echo $GLOBALS['g_name'], "\n";
}

get_name();
两种方法都输出:lxw

超全局变量: 

如果想被函数或类中方法访问,我们就有了超全局变量。
注意:在函数或类中,超全局变量是不能作为可变变量的
PHP自定义的超全局变量:8个
$_GET和$_POST, $_COOKIE和$_SESSION,$_SERVER,$_FILES,$_ENV,$_REQUEST
$v1 = 1;
$v2 = 2;
function show_global()
{
//    将$v1超全局化,开辟空间,函数内部没有改变函数外部的值
//    global $v1, $v2;
//    $v1 =& $v2;
输出:1 2
    //运用外部v1 v2本身的值
//  没使用&符号, 这样使用全局变量,并不是通过参数的形式来使用,而是直接在函数内部改变全局变量的值,所以不用&符号也行
    $GLOBALS['v1'] =& $GLOBALS['v2'];
}  
show_global();
echo $v1, "\n";
echo $v2 . "\n";
输出:2 2

静态变量(static):

仅仅在函数局部作用域中存在,函数执行完,值并没有丢失
给static赋值时不能是函数表达式;

function show_static()
{
    static $x = 0;
    echo $x++;
}

show_static();
show_static();
输出:0 1

10.可变函数: 灵活, 方便,多变

定义:变量名后有圆括号,PHP将寻找与变量的值同名的函数,并且尝试执行它
//可变函数
function get_apple($num){
    return "in the get_apple(),we need".$num."boxs";
}

function get_orange($num){
    return "in the get_orange(),we need".$num."boxs";
}

function get_fruit($fruit,$num){
    $str="get_".$fruit;
    return $str($num);
}

echo get_fruit('apple',5),"\n";

 

不使用可变函数
function get_fruit2($string,$numb){
  
    if ($string=='apple'){
        return get_apple($numb);
    }elseif($string=='orange'){
        return get_orange($numb);
    }
}
echo get_fruit2('apple',4);

11.嵌套函数:

特点:PHP嵌套函数有一些特别之处,最特别的是,当外部函数被调用时,内部函数就会自动进入全局域中,成为新的定义函数。
单层嵌套&&多层嵌套

当in函数已经被存在时,在调用out函数就不能重复定义in函数
function out(){
    if (!function_exists('in')){
        function in(){
            echo "out 函数先执行,in 函数才能执行,我是in函数\n";
        }
    }
}

out();
in();
out();//  Cannot redeclare in() 加判断后不再报错
输出:out 函数先执行,in 函数才能执行,我是in函数

//多层嵌套
function f_out(){
    echo 'out',"\n";
    function f_mid(){
        echo 'mid',"\n";
        function f_in(){
            echo 'in',"\n";
        }
    }
}
f_out();
f_mid();
f_in();
输出:
out
mid
in


嵌套函数传参数
function out($msg_str){
    if (!function_exists('in')){
        function in($msg){
//            echo "out 函数先执行,in 函数才能执行,我是in函数\n";
            echo "function in :".$msg."\n";
        }
    }

    echo "function out :".$msg_str."\n";
    in($msg_str);
}

out("Hello");
in('123');
输出:
function out :Hello
function in :Hello
function in :123

12.递归函数

      定义:函数在它的函数体内调用它自身,
     作用:分解问题,调用自身
function digui($i){
    echo "当前参数为$i:{$i}\n";
    $sum=1;
    if($i==1){
        echo "$i={$i},$sum={$sum}\n";
        return 1;
    }else{
        $sum=$i*digui($i-1);
    }
  echo "$i={$i},$sum={$sum}\n";
    return $sum;
}
echo digui(3);
输出:
当前参数为$i:3
当前参数为$i:2
当前参数为$i:1
$i=1,$sum=1
$i=2,$sum=2
$i=3,$sum=6
6

13.匿名函数(闭包)

定义:匿名函数(anonymous functions),又叫闭包函数(closures),允许临时创建一个没有指定名称的函数,最经常用作回调函数(callback)参数的值。使用:闭包函数可以作为变量的值来使用。

方法一:
$msg = "lxw";
$bibao = function () use (&$msg) {  //多一个&符号  
    echo "hello :" . $msg;
};  //必须加分号
$msg = "lxw22";
$bibao();
输出:lxw22
方法二:
$msg = "lxw";
$bibao = function () use ( $msg) {
    echo "hello :" . $msg;
};  //必须加分号
$msg = "lxw22";
$bibao();
输出:lxw

方法三:
$msg = "lxw";
$bibao = function () use ( $msg) {
    echo "hello :" . $msg;
};  //必须加分号
$msg = "lxw22";
$bibao();
输出:lxw
方法一:定义在use之后按照引用传递调用参数;

方法二和三比较说明: use使用的变量在定义闭包函数之前先声明好,而不是在调用的时候在声明;
闭包函数经典用法
function test_closure($name,Closure $clo){
    echo "Hello",$name."\n";
    $clo();  //注意加括号()
}

test_closure("Lily",function (){
    echo  "welocome";
});
输出:hello Lily,
      welcome

14,代码复用性:

     include与require
include_once与require_once:有且仅引用一次
require与require_once: 引入不存在的文件时报致命性错误,后面的代码停止执行
include与include_once: 引入不存在的文件时报j警告性错误,后面的代码继续执行
 
 
 
 
 
 
 
 
 
 
 
 
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/112750.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)
blank

相关推荐

  • HDU 4778 内存搜索&如压力

    HDU 4778 内存搜索&如压力

  • 2015年最新Android基础入门教程目录(完结版)

    2015年最新Android基础入门教程目录(完结版)2015年最新Android基础入门教程目录(完结版)前言:关于《2015年最新Android基础入门教程目录》终于在今天落下了帷幕,全套教程共148节已编写完毕,附上目录,关于教程的由来,笔者的情况和自学心得,资源分享以及一些疑问等可戳:下面是本系列教程的完整目录:

  • 写代码会用到哪些常用的软件

    写代码会用到哪些常用的软件  说到代码,做程序员会比较了解,想平时经常写的软件有哪些呢,接下来一起看看。  1、SublimeText  SublimeText是一个跨平台的代码编辑器,同时支持Windows、Linux、MacOSX等操作系统,也是HTML和散文先进的文本编辑器。SublimeText具有漂亮的用户界面和强大的功能,主要功能包括:拼写检查,书签,完整的PythonAPI,Goto功能,即时项目切换,多选择,多窗口等等。  2、Dreamweaver  Dreamweaver是集

  • CentOS7安装mysql5.5

    CentOS7安装mysql5.5一、检查本地是否安装过其他版本的mysqlrpm-qa|grep-i mysql由于有些版本自带的有mariadb,检查是否有mariadb,若是有需要先卸载 yum-yremovemaria*二、下载mysql5.5的服务器和客户端的安装包 下载服务器包:wget https://dev.mysql.com/get/Downloads/MySQ…

  • Java中级面试题及答案整理「建议收藏」

    Java中级面试题及答案整理「建议收藏」1、webservice是什么?webservice是一种跨编程语言和跨操作系统的远程调用技术,遵循SOPA/WSDL规范。2、springCloud是什么?springcloud是一个微服务框架,并提供全套分布式系统解决方案。支持配置管理,熔断机制,leader选举,服务治理,分布式session,微代理,控制总线,智能路由,一次性token。3、Java中堆和栈有什么不同?…

  • vue取消eslint规范_vue运行eslint报错

    vue取消eslint规范_vue运行eslint报错关闭eslint代码规范检查

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号