美文网首页
PHP 函数掌握总结

PHP 函数掌握总结

作者: 石小一 | 来源:发表于2017-01-31 15:02 被阅读0次

    PHP自定义函数

    PHP是弱类型语言,相对其他语言来说比较随意和灵活,函数名对大小写不敏感。
    函数名和 PHP 中的其它标识符命名规则相同。有效的函数名以字母或下划线打头,后面跟字母,数字或下划线。可以用正则表达式表示为:[a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*。

    Example #1 展示函数用途的伪代码

    <?php
    function aierui()
    {
        # 业务逻辑
    }
    
    ?>
    

    Example #2 有条件的函数

    当一个函数是有条件被定义时,必须在调用函数之前定义。

    <?php
    
    $flag = true;
    
    star();
    /* 不能在此处调用star()函数,   因为它还不存在,但可以调用bar()函数。*/
    if($flag){
        function  star(){
            echo "star--function";
        }
    }
    
    //判断$flag后为真就可以调用star()函数
    function bar()
    {
        return "bar";
    }
    
    

    Example #3 函数中的函数

    function aierui($str)
    {
        $a = 'some';
        echo $str;
        function add($str1)
        {
            echo $a.$str1;
        }
    }
    //不能够直接先调用aierui()函数内的add函数,
    // 报错 Fatal error: Call to undefined function add()
    // 
    aierui('aierui');
    
    add("like");
    
    //这种情况并且拿不到外函数的变量 提示Notice: Undefined variable: str 
    

    小例:一般就是在自定义中调用PHP内置的函数尤其常见,当然也可以在函数内自定调用,个人不建议,还是在函数外定义去调用吧,

       function convertDate($date,$locale,$length)
       {
           $monthNames = array(
                   "en" => array(
                       "full" => array(1=>'January','February','March','April','May',
                       'June','July','August','September','October','November','December'),
                       
                       "short" => array(1=>'Jan','Feb','Mar','Apr','May','Jun',
                       'Jul','Aug','Sep','Oct','Nov','Dec')
                   ),
                   "es" => array(
                       "full" => array(1=>'Enero','Febrero','Marzo','Abril','Mayo',
                       'Junio','Julio','Agosto','Septiembre','Octubre','Noviembre','Deciembre'),
                       
                       "short" => array(1=>'Ene','Feb','Mar','Abr','May','Jun',
                       'Jul','Ago','Sep','Oct','Nov','Dec')
                   ),
               );
           $exploded = explode("-",$date);
           $year = $exploded[0];
           $month = $exploded[1];
           $day = $exploded[2];
           
           $month = $monthNames[$locale][$length][$month];
           $date = $day . " " . $month . ", " . $year;
           return $date;
       }
    
    echo convertDate("2016-8-23","en","full");//23 August, 2016
    

    Example #4 递归函数

    递归函数简单的理解就是自己调用自己,但是要避免递归函数/方法调用超过 100-200 层,因为可能会使堆栈崩溃从而使当前脚本终止。 无限递归可视为编程错误。

    function recursion($a)
    {
        if ($a < 20) {
            echo "$a\n";
            recursion($a + 1);
        }
    }
    
    recursion(12);
    

    函数的参数

    Example #1 向函数传递数组

    通过参数列表可以传递信息到函数,即以逗号作为分隔符的表达式列表。参数是从左向右求值的。

    function takes_array($input)
    {    
          echo "$input[0] + $input[1] = ", $input[0]+$input[1];
    }
    

    通过引用传递参数

    默认情况下,函数参数通过值传递(因而即使在函数内部改变参数的值,它并不会改变函数外部的值)。如果希望允许函数修改它的参数值,必须通过引用传递参数。

    如果想要函数的一个参数总是通过引用传递,可以在函数定义中该参数的前面加上符号 &:
    Example #1 用引用传递函数参数

    function add_some_extra(&$string)
    {
        $string .= 'and something extra.';
    }
    $str = 'This is a string, ';
    add_some_extra($str);
    echo $str;    // 'This is a string, and something extra.'
    

    默认参数的值

    这个有点像 C++ 风格的标量参数默认值,如下所示:

    function makecoffee($type = "cappuccino")
    {
        return "Making a cup of $type.\n";
    }
    echo makecoffee();//Making a cup of cappuccino.
    echo makecoffee(null);//Making a cup of .
    echo makecoffee("espresso");//Making a cup of espresso.
    

    默认值必须是常量表达式,不能是诸如变量,类成员,或者函数调用等。

    注意当使用默认参数时,任何默认参数必须放在任何非默认参数的右侧;否则,函数将不会按照预期的情况工作。

    function makeyogurt($type = "acidophilus", $flavour) (×)
    function makeyogurt($flavour, $type = "acidophilus") (√)

    PHP内置函数

    这些内置函数是我在项目中用到的比较多

    检测变量

    is_string()、is_array()、is_object()、is_float()、
    is_null()、isset、empty

    我在这半年多的时间里上面用到最多是后面三个,看上去不同。但却又相同之处。
    empty
      如果 变量 是非空或非零的值,则 empty() 返回 FALSE。换句话说,""、0、"0"、NULL、FALSE、array()、var $var、未定义; 以及没有任何属性的对象都将被认为是空的,如果 var 为空,则返回 TRUE。
    isset
      如果 变量 存在(非NULL)则返回 TRUE,否则返回 FALSE(包括未定义)。变量值设置为:null,返回也是false;unset一个变量后,变量被取消了。注意,isset对于NULL值变量,特殊处理。
    is_null
      检测传入值【值,变量,表达式】是否是null,只有一个变量定义了,且它的值是null,它才返回TRUE . 其它都返回 FALSE 【未定义变量传入后会出错!】

    过滤掉的范围从大到小empty>isset>is_null
    也有人说isset是语言结构、is_null是函数。鸟哥分析isset与is_null区别

    处理string用的内置函数

    最简单直接输出字符串
    echo() 输出字符串
    print()输出一个或多个字符串。
    printf() 输出格式化的字符串。
    [strlen()] 返回字符串的长度。
    [substr()] 返回字符串的一部分。
    [strtolower()]把字符串转换为小写字母。
    [strtoupper()]把字符串转换为大写字母。
    [strstr()]查找字符串在另一字符串中的第一次出现(对大小写敏感)。
    [str_replace()]替换字符串中的一些字符(对大小写敏感)。
    [explode()]把字符串打散为数组。
    [implode()]返回由数组元素组合成的字符串。[join()]和这个函数一样
    mb_strpos — 查找字符串在另一个字符串中首次出现的位置
    [strcmp()]比较两个字符串(对大小写敏感)看到过别人用这函数比较两次输入的密码

    处理array用的内置函数

    我之前写过关于处理数组部分,这里附上链接就行吧
    学习PHP的数组总结【经验】
    处理数组,在项目中我的特别有感触。由于是野路子出身,很多东西不清楚。
    在这里留一些问题吧

    • 二维数组的遍历、遍历时转换数据格式等 如三目运算符对数据状态的判断、时间戳转换成具体的时间格式。
    • 查询结果某个字段是json格式怎么方便在TP view页面上拿到
    • 修改复选框后从数据库中删除没用的数据
    • 存在父级id时,怎么将父级和child一块儿重新排序 输出
    • 字符串的拼接特别是和sql公用的时
    • 一个表单提交过来是一个二维数组(假设里面array为1,外面为2),将array1存到另一个表中,甚至是三位 四维数组的时候怎么处理,三维可以尝试使用TP 批量添加方法addAll()

    贴一段代码

            $data['product_id'] = $this->shop_activity_product->where(" activity_id = " .$id)->field("product_id")->select();
            foreach ($data['product_id']  as $value) {
                $value = implode(",", $value);
                $temp[] = $value;
            }
            $t = "";
            foreach ($temp as  $value) {
                $t .="".$value."".",";
            }
              $data['product_id'] = substr($t, 0);
            if($data['gift'] == 1 && $data['gift_text'] != ''){ //搭赠产品及规则信息
                $gift_text = json_decode($data['gift_text']);
                $data['gift_text'] = array();
                foreach($gift_text as $k=>$v){
                    $row = $this->shop_product
                            ->alias("sp")
                            ->join("shop_goods as sg ON sg.id = sp.goods_id")
                            ->field("sg.title,sp.*")
                            ->where("sp.id = %d",$v->product_id)
                            ->find();
                    
                    $spec = json_decode($row['spec']);
                    $row['spec'] = '';
                    if(!empty($spec)){
                        foreach($spec as $k1=>$v1){
                            $row['spec'] .= $v1->sku_text.':'.$v1->text.',';
                        }
                    }
                    $row['spec'] = rtrim($row['spec'],',');
                    $data['gift_text']['product_id'] = $v->product_id;
                    $data['gift_text']['product_name'] = $row['title'];
                    $data['gift_text']['product_spec'] = $row['spec'];
                    $data['gift_text']['product_num'] = $v->num;
                    $data['gift_text']['jine'] = $v->jine;
                    $data['gift_text']['shuliang'] = $v->shuliang;
                }
            }
    

    处理files、Date、Directory、GD库、等用的内置函数

    我本人用的不是很多,今天在这里暂时没有资格说太多,需要话建议看看PHP官方手册吧,操作数据库的内置函数在这里也不说啦。

    我还会用到获得唯一的字符串用来做图片文件名等

    //确保文件名唯一,防止重名产生覆盖
    - $uniName = md5(uniqid(microtime(true),true)).'.'.$ext;
    - $uniName = uniqid(rand(0,time())).'.'.$ext;
    
    
      private function createCheckCode(){
      //这里主要产生随机码,从2开始是为了区分1和l
      $code="23456789abcdefghijkmnpqrstuvwxyzABCDEFGHIJKMNPQRSTUVWXYZ";
      $string='';
      for($i=0; $i < $this->codeNum; $i++){
      $char=$code{rand(0, strlen($code)-1)};
      $string.=$char;
      }
      return $string;
      }
    

    获取PHP所有内置函数

    echo "<pre>";
    print_r(get_defined_functions());
    

    以上内容都很死板和简单,在接下来我会在这里继续探讨PHP魔力。

    注明

    本人较熟悉TP框架,接触过小项目一二三吧,懂得不是很对,因为不知道的太多。由于本人水平有限,所有错误恳请各位纠正。

    相关文章

      网友评论

          本文标题:PHP 函数掌握总结

          本文链接:https://www.haomeiwen.com/subject/docosttx.html