1、傳遞任意數量的函數參數
我們在.NET或JAVA程式設計中,一般函數參數個數都是固定的,但是PHP允許你使用任意個數的參數。下面這個範例向你展示了PHP函數的預設參數:
Php程式碼
// 兩個預設參數的函數
function foo($arg1 = ”, $arg2 = ”) {
echo “arg1: $arg1n”;
echo “arg2: $arg2n”;
}
foo('hello','world');
/* 輸出:
arg1:
arg2:
*/
下面這個例子是PHP的不定參數用法,使用到了?func_get_args()方法:
// 是的,形蠔/
function foo(的傳入參數的陣列
$args = func_get_args();
foreach ($args as $k => $v) {
echo “arg }
foo();
/* 什麼也不會輸出*/
foo('hello');
/* 輸出
arg1: hello
*/ ;
/* 輸出
arg1: hello
arg2: world
arg3: again
*/
2、使用glob()來找出文件名詞
當你看到?glob() 的時候,你也許並不知道這是用來做什麼的,其實glob()和scandir() 一樣,可以用來查找文件,請看下面的用法:
Php程式碼
// 取得所有的字尾為PHP的檔案
$files = glob('*.php');
print_r($files);
/* 輸出:
Array test
(0. [1] => pi.php
[2] => post_output.php
[3] => test.php
)
*/
?取PHP檔案與TXT檔
$files = glob('*.{php,txt}', GLOB_BRACE);
print_r($files);
/*輸出:
Array
(
[1] => pi.php
[2] => post_output.php
[3] => test.php
[4] => log.txt
[5] => test.txt
)
*
*
你還可以加上路徑:
Php代碼
$files = glob('../images/a*.jpg');
print_r($ [0] => ../images/apple.jpg
[1] => ../images/art.jpg
)
*/
如果你想要得到絕對路徑,可以呼叫?real() 函數:
Php程式碼
$files = glob('../images/a*.jpg');
// applies the function to each array element
$files = array_map('real)($files); $files);
/* output looks like:
Array
(
[0] => C:wampwwwimagesapple.jpg
[1] => C:wampimagesart.jpgapple.jpg
[1] => C:wampimagesart.jpgg 狀況資訊
PHP的記憶體回收機制已經非常強大,你也可以使用PHP腳本取得目前記憶體的使用情況,呼叫memory_get_usage() 函數取得當期記憶體使用情況,呼叫memory_get_peak_usage() 函數取得記憶體使用的峰值。參考代碼如下:
Php代碼
echo “Initial: “.memory_get_usage().” bytes n”;
/* 輸出
Initial: 361400 bytes */ i $array []= md5($i);
}
// 刪除一半的記憶體
for ($i = 0; $i }
echo “Final: “.memory_get_usage().” bytes n”;
/* prints
Final: 885912 by
/* prints
Final: 885912 bybytes at. bytes n”;
/* 輸出峰值
Peak: 13687072 bytes
*/
4、取得CPU使用資訊
4、取得CPU使用資訊
取得了記憶體使用情況,也可以使用PHP的getrusage()來取得CPU使用情況,該方法在windows下不可用。
Php程式碼
print_r(getrusage());
/* 輸出
Array
(
[ru_oublock] => 0
[ru_inblock] = 2 3
[ ru_maxrss] => 12692
[ru_ixrss] => 764
[ru_idrss] => 3864
[ru_minflt] => 94
[ru_majflt] = 0 67
[ru_nivcsw ] => 4
[ru_nswap] => 0
[ru_utime.tv_usec] => 0
[ru_utime.tv_sec] => 0
[ru_stime.tv_secc] => 6269. */
這個結構看起來很晦澀,除非你對CPU很了解。以下一些解釋:
ru_oublock: 區塊輸出操作
ru_inblock: 區塊輸入操作
ru_msgsnd: 傳送的message
ru_msgrrs全部非共享記憶體大小
ru_minflt: 頁回收
ru_majflt: 頁失效
ru_nsignals: 收到的訊號
ru_nvcsw: 主動情境切換
ru_nivcs:sectimes:cLow_Lam;
ru_utime .tv_sec: 使用者態時間(seconds)
ru_stime.tv_usec: 系統核心時間(microseconds)
ru_stime.tv_sec: 系統核心時間?(seconds)
要看到你的腳本消耗了多少CPU,我們需要看看「什麼」
要看到你的腳本消耗了多少使用者態的時間」和「系統核心時間」的值。秒和微秒部分是分別提供的,您可以將微秒值除以100萬,並把它加到秒的值後,可以得到有小數部分的秒數。
Php代碼
// sleep for 3 seconds (non-busy)
sleep(3);
$data = getrusage();
echo “Usertime:s:. o.
$data['ru_utime.tv_usec'] / 1000000);
echo “System time: “.
($data['ru_stime.tv_sec'] + ']
($data['ru_stime.tv_sec'] + ')
$data['ru_sL_stime.tv * 輸出
User time: 0.011552
System time: 0
*/
sleep是不佔用系統時間的,我們可以來看下面的一個例子:? for($i=0;$i}
$data = getrusage();
echo “User time: “.
($data['ru
echo “User time: “.
($data['ru_time.tv_sec.] 'ru_utime.tv_usec'] / 1000000);
echo “System time: “.
($data['ru_stime.tv_sec'] +
$data['ru_stime.tv_usec'] / time: 1.424592
System time: 0.004204
*/
這花了約14秒的CPU時間,幾乎所有的都是使用者的時間,因為沒有系統呼叫。
系統時間是CPU花費在系統呼叫上的執行核心指令的時間。以下是一個例子:
Php代碼
$start = microtime(true);
// keep calling microtime for about 3 seconds
}while(microtime(true) – $start }while(microtime(true) – $start echo “User time: “.
($data['ru_utime.tv_sec'] +
$data['ru_utime.tv_usec'] / 1000000); ru_stime.tv_sec'] +
$data['ru_stime.tv_usec'] / 1000000);
/* prints
User time: 1.088171
System time:
我們可以看到上面這個範例更耗CPU 。
5、取得系統常數
PHP 提供非常有用的系統常數可以讓你得到目前的行號(__LINE__),檔案(__FILE__),目錄(__DIR__),函數名稱(__FUNCTION__),類別名稱(__CLASS__),方法名稱(__METHOD__) 和名字空間(__NAMESPACE__),很像C語言。
我們可以以為這些東西主要是用於調試,當也不一定,比如我們可以在include其它文件的時候使用?__FILE__ (當然,你也可以在 PHP 5.3以後使用 __DIR__ ),下面是一個例子。
Php程式碼
// this is relative to the loaded script’s path
// it may cause problems when running scripts from different directories
.// this is always relative to this file's path
// no matter where it was included from
require_once(dirname(__FILE__) . '/config/database.php'); 的訊息,這樣有助於你偵錯程式:
Php代碼
// some code
// …
my_debug(“some debug message”, __LINE__o🠟/some
/ 是 m
// some more code
// …
my_debug(“another debug message”, __LINE__);
/* 輸出
Line 11: another demmm demido_oiono_m.
echo “ Line $line: $msgn”;
}
6、產生唯一的id
很多朋友都利用md5()產生唯一的編號,但是md5()有幾個缺點:1、無序,導致資料庫中排序性能下降。 2、太長,需要更多的儲存空間。其實PHP中自帶一個函數來產生唯一的id,這個函數就是uniqid()。以下是用法:
Php代碼
// generate unique string
echo uniqid();
/* 輸出
4bd67c947233e uniqid();
/* 輸出
4bd67c9472340
* /
該演算法是根據CPU時間戳來產生的,所以在相近的時間段內,id前幾位是一樣的,這也方便id的排序,如果你想更好的避免重複,可以在id前加上前綴,如:
Php代碼
// 前綴
echo uniqid('foo_');
/* 輸出
f id(”,true);
/* 輸出
4bd67d6cd8b926.12135106
*/
// 都有
echo uniqid('bar_',true);
echo uniqid('bar_',true);
*/
7、序列化
PHP序列化功能大家可能用的比較多,也比較常見,當你需要把資料存到資料庫或檔案中是,你可以利用PHP中的serialize() 和unserialize()方法來實現序列化和反序列化,程式碼如下:
Php代碼
// 一個複雜的陣列
$myvar = array(
'hello',
42,
array(1,',
42,
array(1,'swo'),app );
$ string = serialize($myvar);
echo $string;
/* 輸出
a:4:{i:0;s:5:”hello”;i:1;i:42;i:2;a:2 :{i:0;i:1;i:1;s:3:”two”;}i:3;s:5:”apple”;}
*/
// 反序例化
$newvar = unserialize($string);
print_r($newvar);
/* 輸出
Array
(
[0] => hello
[1] => 42
[0] => hello
[1] => 42
[0] 1
[1] => two
)
[3] => apple
)
*/
如何序列化成json格式呢,並做好,php也已經為你放心了,使用php版本 5.322呢可使用json_encode() 和json_decode() 函數來實現json格式的序列化,程式碼如下:
Php程式碼
// a complex array
$myvar = array(
'hello',
$myvar 'two'),
'apple'
);
// convert to a string
$string = json_encode($myvar);
echo $string two"],”apple”]
*/
// you can reproduce the original variable
$newvar = json_decode($string);
print_r($newvar = json_decode($string);
print_r($newvar); > hello
[1] => 42
[2] => Array
(
[0] => 1
[1] => two
)
[3] => apple 、字串壓縮
當我們說到壓縮,我們可能會想到檔案壓縮,其實,字串也是可以壓縮的。 PHP提供了?gzcompress() 和gzuncompress() 函數:
Php代碼
$string =
「Lorem ipsum dolor sit amet, consectetur
adipiscing . Praesent pulvinar,
sapien vel feugiat vestibulum, nulla dui pretium orci,
non ultricies elit lacus quis ante. Lorem ipsum dolor
遵循輔導流程很重要。一些價格對ullamcorper骨灰盒的人來說是有針對性的。即使與群眾同在,但哀悼的醜陋時刻。 Curabitur sed nibh eu elit
軟作業。它就是家,是生命的結果。在那些大孩子們
告訴我們要進行輔導。但不是我的恐懼,而是 Lacinia
augue。但很好,除非,以軟的方式裝飾,軟的
但是現在。而且,正好趕上做作業。
Nulla 也不需要害怕 Hendrerit scelerisque
eu 不需要。果然沒有euismod湖可以喝。 “;
$壓縮= gzcompress($string);
echo“原始尺寸:”。 strlen($string)."n";
/* 輸出原始大小
原始大小:800
*/
echo “壓縮後大小:」。strlen($壓縮). 」n”;
/* 解光劇後後圖片
壓縮大小: 418
*/
// 解光劇
$original = gzuncompress($compressed);有50% 的壓縮率,同時還可以使用?gzencode() 和gzdecode() 函數來壓縮,只是使用不同的壓縮演算法,是不是很實用? >