九個PHP很有用的功能

openkk 12年前發布 | 1K 次閱讀 5.2.1版本發布

1. 函數的任意數目的參數

  你可能知道PHP允許你定義一個默認參數的函數。但你可能并不知道PHP還允許你定義一個完全任意的參數的函數

  下面是一個示例向你展示了默認參數的函數:

  // 兩個默認參數的函數

  function foo($arg1 = '', $arg2 = '') {

  echo "arg1: $arg1\n";

  echo "arg2: $arg2\n";

  }

  foo('hello','world');

  /* 輸出:

  arg1: hello

  arg2: world

  */

  foo();

  /* 輸出:

  arg1:

  arg2:

  */ 

  現在我們來看一看一個不定參數的函數,其使用到了?func_get_args()方法:

  // 是的,形參列表為空

  function foo() {

  // 取得所有的傳入參數的數組

  $args = func_get_args();

  foreach ($args as $k => $v) {

  echo "arg".($k+1).": $v\n";

  }

  }

  foo();

  /* 什么也不會輸出 */

  foo('hello');

  /* 輸出

  arg1: hello

  */

  foo('hello', 'world', 'again');

  /* 輸出

  arg1: hello

  arg2: world

  arg3: again

  */ 

  2. 使用 Glob() 查找文件

  很多PHP的函數都有一個比較長的自解釋的函數名,但是,當你看到?glob() 的時候,你可能并不知道這個函數是用來干什么的,除非你對它已經很熟悉了。

  你可以認為這個函數就好?scandir() 一樣,其可以用來查找文件。

  // 取得所有的后綴為PHP的文件

  $files = glob('*.php');

  print_r($files);

  /* 輸出:

  Array

  (

  [0] => phptest.php

  [1] => pi.php

  [2] => post_output.php

  [3] => test.php

  )

  */ 

  你還可以查找多種后綴名

  // 取PHP文件和TXT文件

  $files = glob('*.{php,txt}', GLOB_BRACE);

  print_r($files);

  /* 輸出:

  Array

  (

  [0] => phptest.php

  [1] => pi.php

  [2] => post_output.php

  [3] => test.php

  [4] => log.txt

  [5] => test.txt

  )

  */

  你還可以加上路徑:

  $files = glob('../images/a*.jpg');

  print_r($files);

  /* 輸出:

  Array

  (

  [0] => ../images/apple.jpg

  [1] => ../images/art.jpg

  )

  */ 

  如果你想得到絕對路徑,你可以調用?realpath() 函數:

  $files = glob('../images/a*.jpg');

  // applies the function to each array element

  $files = array_map('realpath',$files);

  print_r($files);

  /* output looks like:

  Array

  (

  [0] => C:\wamp\www\images\apple.jpg

  [1] => C:\wamp\www\images\art.jpg

  )

  */ 

  3. 內存使用信息

  觀察你程序的內存使用能夠讓你更好的優化你的代碼。

  PHP 是有垃圾回收機制的,而且有一套很復雜的內存管理機制。你可以知道你的腳本所使用的內存情況。要知道當前內存使用情況,你可以使 用?memory_get_usage() 函數,如果你想知道使用內存的峰值,你可以調用memory_get_peak_usage() 函數。

  echo "Initial: ".memory_get_usage()." bytes \n";

  /* 輸出

  Initial: 361400 bytes

  */

  // 使用內存

  for ($i = 0; $i < 100000; $i++) {

  $array []= md5($i);

  }

  // 刪除一半的內存

  for ($i = 0; $i < 100000; $i++) {

  unset($array[$i]);

  }

  echo "Final: ".memory_get_usage()." bytes \n";

  /* prints

  Final: 885912 bytes

  */

  echo "Peak: ".memory_get_peak_usage()." bytes \n";

  /* 輸出峰值

  Peak: 13687072 bytes

  */ 

  4. CPU使用信息

  使用?getrusage() 函數可以讓你知道CPU的使用情況。注意,這個功能在Windows下不可用。

  print_r(getrusage());

  /* 輸出

  Array

  (

  [ru_oublock] => 0

  [ru_inblock] => 0

  [ru_msgsnd] => 2

  [ru_msgrcv] => 3

  [ru_maxrss] => 12692

  [ru_ixrss] => 764

  [ru_idrss] => 3864

  [ru_minflt] => 94

  [ru_majflt] => 0

  [ru_nsignals] => 1

  [ru_nvcsw] => 67

  [ru_nivcsw] => 4

  [ru_nswap] => 0

  [ru_utime.tv_usec] => 0

  [ru_utime.tv_sec] => 0

  [ru_stime.tv_usec] => 6269

  [ru_stime.tv_sec] => 0

  )

  */ 

  這個結構看上出很晦澀,除非你對CPU很了解。下面一些解釋:

  ru_oublock: 塊輸出操作

  ru_inblock: 塊輸入操作

  ru_msgsnd: 發送的message

  ru_msgrcv: 收到的message

  ru_maxrss: 最大駐留集大小

  ru_ixrss: 全部共享內存大小

  ru_idrss:全部非共享內存大小

  ru_minflt: 頁回收

  ru_majflt: 頁失效

  ru_nsignals: 收到的信號

  ru_nvcsw: 主動上下文切換

  ru_nivcsw: 被動上下文切換

  ru_nswap: 交換區

  ru_utime.tv_usec: 用戶態時間 (microseconds)

  ru_utime.tv_sec: 用戶態時間(seconds)

  ru_stime.tv_usec: 系統內核時間 (microseconds)

  ru_stime.tv_sec: 系統內核時間?(seconds) 

 本文由用戶 openkk 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!