zoukankan      html  css  js  c++  java
  • 自定义函数和内部函数考察点

    变量的作用域和静态变量

    变量的作用域

    变量的作用域也称变量的范围,变量的范围即它定义的上下文背景(也是它的生效范围)。大部分的PHP变量只有一个单独的范围。这个单独的范围跨度同样包含了include和require引入的文件。 

    <?php
    $outer = 'str';//全局变量
    function myfunc()
    {
        echo $outer;//局部变量
    }
    //全局变量默认不能直接拿到函数内部使用,如果要使用,需要用到global关键字
    function myfunc2()
    {
        global $outer;
        echo $outer;//
        
        $GLOBALS['outer'];//使用$GLOBALS数组也可以访问到全局变量
    }

    静态变量

    静态变量仅在局部函数域中存在,但当程序执行离开次作用域时,其值并不会消失。

    static关键字

    1. 仅初始化一次
    2. 初始化时需要赋值
    3. 每次执行函数该值会保留
    4. static修饰的变量是局部的,仅在函数内部有效
    5. 可以记录函数的调用次数,从而可以在某些条件下终止递归
    <?php
    function myFunc()
    {
        static $a = 1;
        echo $a ++;
    }
    myFunc();//1
    myFunc();//2
    <?php
    
    $count = 5;
    function get_count()
    {
        static $count;
        return $count++;
    }
    echo $count;// echo 5
    ++$count;// $count = 6
    
    echo get_count();//进入函数内部,static $count 并没有对$count 进行赋值,因此$count=NULL,return $count++,返回$count 的值,并对$count自增,因此此时echo的是NULL 也就是没有输出
    echo get_count();//return $count++ ,返回$count,$count在上次自增后结果为1(NULL++ 是1),因此echo 1

    函数的参数及参数的引用传递

    默认情况下,函数的参数传递是值传递,要想在函数内部改变参数的值,需要使用引用传递。引用传递使用&
    引用传递只能传递变量,不允许传递值。也就是不能传递常量

    <?php
        $a = 10;
        function test($a){
            $a = 20;
            echo $a."<br>";
        }
        test($a);   //20
        echo $a."<br>"; //10
        // 函数内部传递进去的是变量的值,所以不管你在函数里面怎么改,都不会对函数外面的值产生影响
        function test2(&$a){
            $a = 20;
            echo $a."<br>";
        }
        test2($a);  //20
        echo $a."<br>"; //20
        // 这次给函数传递进去的不再是一个值了,而是变量的地址,所以在函数内部也可以改变函数外面的值
    ?>

    函数的返回值及引用返回

    • 值通过使用可选的返回语句(return)返回
    • 可以返回包括数组和对象的任意类型
    • 返回语句会终止函数执行,将控制权交回函数调用处
    • 省略return,返回值为NULL,不可有多个返回值(如果想返回多个值,可以反回一个数组)
    • 从函数返回一个引用,必须在函数声明和指派返回值给一个变量时都使用引用运算符&
    <?php
    
    function &myFunc()
    {
        static $b = 10;
        return $b;
    }
    $a = myFunc();//10
    $a = &myFunc();//$a 指向了 $b
    $a = 100;//$b 也变成了 100
    echo myFunc();//100

    外部文件的导入

    include/require语句包含并运行指定文件
    如果给出路径名则按照路径来找,
    否则从include_path中查找,如果include_path中也没有,则从调用脚本文件所在的目录和当前工作目录下寻找
    当一个文件被包含时,其中所包含的代码继承了include所在行的变量范围。
    加载过程中未找到文件则include 结构会发出一条警告(E_WARNING);这一点和require不同,require会发出一个致命错误(E_COMPILE_ERROR)

    系统内置函数

    时间日期函数

    date()函数

    date() 函数把时间戳格式化为更易读的日期和时间。

    语法:date(format,timestamp)

    参数描述
    format 必需。规定时间戳的格式。
    timestamp 可选。规定时间戳。默认是当前时间和日期。

    常用于日期的格式字符:

    • d - 表示月里的某天(01-31)
    • m - 表示月(01-12)
    • Y - 表示年(四位数)
    • 1 - 表示周里的某天
    <?php
    echo "今天是 " . date("Y/m/d") . "<br>";
    echo "今天是 " . date("Y.m.d") . "<br>";
    echo "今天是 " . date("Y-m-d") . "<br>";
    echo "今天是 " . date("l");//周几(friday)
    ?>

    常用于时间的格式字符:

    • h - 带有首位零的 12 小时小时格式
    • i - 带有首位零的分钟
    • s - 带有首位零的秒(00 -59)
    • a - 小写的午前和午后(am 或 pm)

    strtotime()函数

    strtotime() 函数将任何英文文本的日期或时间描述解析为 Unix 时间戳(自 January 1 1970 00:00:00 GMT 起的秒数)。
    注意:如果年份表示使用两位数格式,则值 0-69 会映射为 2000-2069,值 70-100 会映射为 1970-2000。
    注意:请注意 m/d/y 或 d-m-y 格式的日期,如果分隔符是斜线(/),则使用美洲的 m/d/y 格式。如果分隔符是横杠(-)或者点(.),则使用欧洲的 d-m-y 格式。为了避免潜在的错误,您应该尽可能使用 YYYY-MM-DD 格式或者使用 date_create_from_format() 函数。

    mktime()函数

    mktime(hour,minute,second,month,day,year,is_dst);

    参数描述
    hour 可选。规定小时。
    minute 可选。规定分。
    second 可选。规定秒。
    month 可选。规定月。
    day 可选。规定天。
    year 可选。规定年。
    is_dst 可选。如果时间在夏令时 (DST) 期间,则设置为 1,否则设置为 0,若未知则设置为 -1(默认)。

    time()函数

    返回自 Unix 纪元(January 1 1970 00:00:00 GMT)起的当前时间的秒数。(unix时间戳)

    microtime()函数

    返回当前 Unix 时间戳的微秒数。

    microtime(get_as_float);

    参数描述
    get_as_float 可选。当设置为 TRUE 时,规定函数应该返回浮点数,否则返回字符串。默认为 FALSE。

    date_default_timezone_set()函数

    设置默认时区

    <?php
    date_default_timezone_set("Asia/Shanghai");
    echo date_default_timezone_get();
    ?>

    ip处理函数

    ip2long()函数

    函数 ip2long() 返回 IPV4 网络地址的长整型格式,从标准网络地址格式(点字符串)转化得到。

    long2ip()函数

    long2ip() 函数通过长整型的表达形式转化生成带点格式的互联网地址(例如:aaa.bbb.ccc.ddd )。

    打印处理函数

    print()函数

    语言结构,只能打印一个变量

    printf()

    根据格式输出

    print_r()

    会将数组、对象格式化好之后输出

    echo()

    语言结构,可以打印多个变量,用逗号隔开

    sprintf()

    根据格式返回,不输出

    var_dump()

    会将数组、对象格式化好之后输出,并显示数据类型

    var_export()

    将数组格式化后输出,可返回合法的php代码

    序列化及反序列化函数

    serialize()函数

    unserialize()函数

    字符串处理函数

    implode()函数

    将一个一维数组的值转化为字符串

    explode()函数

    使用一个字符串分割另一个字符串

    join()函数

    implode()函数的别名

    str_replace()函数

    mixed str_replace ( mixed $search , mixed $replace , mixed $subject [, int &$count ] )
    该函数返回一个字符串或者数组。该字符串或数组是将 subject 中全部的 search 都被 replace 替换之后的结果。
    如果没有一些特殊的替换需求(比如正则表达式),你应该使用该函数替换 ereg_replace() 和 preg_replace()。

    数组处理函数

    array_keys()

    返回数组中部分的或所有的键名

    array_values()

    返回数组中所有的值

    array_diff()

    计算数组的差集

    array_intersect()

    计算数组的交集

    array_merge()

    合并数组

    array_shift()

    将数组开头的单元移出数组

    array_unshift()

    在数组开头插入一个或多个单元

    array_pop()

    弹出数组最后一个单元(出栈)

    array_push()

    将一个或多个单元压入数组的末尾(入栈)

    可变函数

    PHP 支持可变函数的概念。这意味着如果一个变量名后有圆括号,PHP 将寻找与变量的值同名的函数,并且尝试执行它。可变函数可以用来实现包括回调函数,函数表在内的一些用途。

    <?php
    function foo() {
        echo "In foo()<br />
    ";
    }
    
    function bar($arg = '') {
        echo "In bar(); argument was '$arg'.<br />
    ";
    }
    
    // 使用 echo 的包装函数
    function echoit($string)
    {
        echo $string;
    }
    
    $func = 'foo';
    $func();        // This calls foo()
    
    $func = 'bar';
    $func('test');  // This calls bar()
    
    $func = 'echoit';
    $func('test');  // This calls echoit()
    ?>
    杂念太多,必然根基浅薄
  • 相关阅读:
    .NET西安社区 [拥抱开源,又见 .NET] 第二次活动简报
    HttpClient在.NET Core中的正确打开方式
    西安活动 | 2019年1月13号 "拥抱开源, 又见.NET" 线下交流活动报名进行中
    基于IdentityServer4 实现.NET Core的认证授权
    dnSpy 强大的.Net反编译软件
    .NET Core中实现AOP编程
    Why DDD and layered architecture
    领域驱动设计之-前言
    load average 定义(网易面试)
    sendfile“零拷贝”和mmap内存映射
  • 原文地址:https://www.cnblogs.com/starshine-zhp/p/12834726.html
Copyright © 2011-2022 走看看