!isset($matches['host']) && $matches['host'] = '';
这个语法怎么不理解
 变量&&变量 =变量
UC、UCHOME都出现过,
这句作用是什么?
第二个是一个正则
"\@?\\\$[a-zA-Z_]\w*(?:\[[\w\.\"\'\[\]\$]+\])*";
(?:这块又怎么理解?

解决方案 »

  1.   

    !isset($matches['host']) && $matches['host'] = ''; 如果没有设置$matches['host'] 或者$matches['host'] 为空
    有什么问题吗?
      

  2.   

    漏看了$matches['host'] = ''; 
    你确定是这么写的吗?不是$matches['host'] == ''; 
      

  3.   

    (?:\[[\w\.\"\'\[\]\$]+\])这块是一个整体
    ?表示0个或1个字符
    这里的很多\基本都是转义的.. 
    !isset($matches['host']) && $matches['host'] = ''; 
    如果!isset($matches['host'])为真,则执行后面的$matches['host'] = '',否则不执行.
      

  4.   

    3楼是正解,&&是短路与 && 前面的 !isset($matches['host'])如果为真,才会执行后面的赋值 $matches['host'] = '', 否则不执行。这样写可以提高效率,但是代码的可读性相对差一点。并不是要做两次判断。
      

  5.   

    (?:pattern) 
    匹配 pattern 但不获取匹配结果,也就是说这是一个非获取匹配,不进行存储供以后使用.
    不是你想像的哪样,举例说明:$str = "asfdassafas12133asfdsadf";
    preg_match_all("/(?:[\d]+)/i", $str, $matches);
    var_dump($matches);
    /*
    array(1) {
      [0]=>
      array(1) {
        [0]=>
        string(5) "12133"
      }
    }
    */
    preg_match_all("/([\d]+)/i", $str, $matches1);
    var_dump($matches1);
    /*
    array(2) {
      [0]=>
      array(1) {
        [0]=>
        string(5) "12133"
      }
      [1]=>
      array(1) {
        [0]=>
        string(5) "12133"
      }
    }
    */