猿问

关于ini_get php手册的例子?

<?php
 /*
我们的 php.ini 包含了以下的设置:

display_errors = On
register_globals = Off
post_max_size = 8M
*/

 echo  'display_errors = '  .  ini_get ( 'display_errors' ) .  "\n" ;
echo  'register_globals = '  .  ini_get ( 'register_globals' ) .  "\n" ;
echo  'post_max_size = '  .  ini_get ( 'post_max_size' ) .  "\n" ;
echo  'post_max_size+1 = '  . ( ini_get ( 'post_max_size' )+ 1 ) .  "\n" ;
echo  'post_max_size in bytes = '  .  return_bytes ( ini_get ( 'post_max_size' ));

function  return_bytes ( $val ) {
     $val  =  trim ( $val );
     $last  =  strtolower ( $val [ strlen ( $val )- 1 ]);
    switch( $last ) {
         // 自 PHP 5.1.0 起可以使用修饰符 'G'
         case  'g' :
             $val  *=  1024 ;
        case  'm' :
             $val  *=  1024 ;
        case  'k' :
             $val  *=  1024 ;
    }

    return  $val ;
}
/*输出为以下内容
display_errors = 
register_globals = 
post_max_size = 8M
post_max_size+1 = 9
post_max_size in bytes = M
*/
 ?>

1.  "post_max_size+1"这个变量为什么会是9?难道字符串与整型相加字母会自动转为0?


2.  注释掉switch语句后,$last为什么会输出m? 


3.  $last  =  strtolower ( $val [ strlen ( $val )- 1 ]);    为什么$val是[strlen ( $val )- 1],而不是(strlen ( $val )- 1)?

[],()这两种括号有什么区别?


错过了年华
浏览 1117回答 1
1回答

qq_青枣工作室_0

1. 你的post_max_size="8M", 跟数字相加时,会尝试把字符串转为数字,并且只转字符串的前面数字部分,所以就把"8M"转为8了。8+1=9。2. 注释掉switch,$val值没修改,原样输出"8M"3. 字符串可以像数组那样,通过索引来获取单个字符。$val[strlen($val)-1],就是获取$val的最后一个字符,"8M"的最后一个字符就是"M"。而你说的$val(...)是函数调用的语法,调用$val这个函数。但这里$val并不是函数。
随时随地看视频慕课网APP
我要回答