Heim >Backend-Entwicklung >PHP-Tutorial >8 wesentliche Funktionen für die PHP-Entwicklung

8 wesentliche Funktionen für die PHP-Entwicklung

巴扎黑
巴扎黑Original
2018-05-23 16:46:346218Durchsuche

[Einführung] Programmierer, die PHP entwickelt haben, sollten wissen, dass es viele integrierte Funktionen in PHP gibt. Die Beherrschung dieser Funktionen kann Ihnen dabei helfen, sich in der PHP-Entwicklung besser zurechtzufinden von ihnen sind sehr praktisch, ich hoffe, dass alle PHP-Entwickler sie beherrschen können. 1. Übergeben Sie eine beliebige Anzahl von Funktionen

Programmierer, die PHP-Entwicklung durchgeführt haben, sollten wissen, dass es viele integrierte Funktionen in PHP gibt. Die Beherrschung dieser Funktionen kann Ihnen dabei helfen, sich in der PHP-Entwicklung besser zurechtzufinden Ich hoffe, dass alle PHP-Entwickler sie beherrschen können.

8 wesentliche Funktionen für die PHP-Entwicklung

1. Übergeben Sie eine beliebige Anzahl von Funktionsparametern

Wir befinden uns in der .NET- oder JAVA-Programmierung. Im Allgemeinen ist die Anzahl der Funktionsparameter festgelegt, PHP erlaubt jedoch die Verwendung einer beliebigen Anzahl von Parametern. Das folgende Beispiel zeigt Ihnen die Standardparameter von PHP-Funktionen:

// 两个默认参数的函数  
function foo($arg1 = ”, $arg2 = ”) {  
echo “arg1: $arg1\n”;  
echo “arg2: $arg2\n”;  
}  
foo(‘hello’,'world’);  
/* 输出: 
arg1: hello 
arg2: world 
*/  
foo();  
/* 输出: 
arg1: 
arg2: 
*/  
下面这个示例是PHP的不定参数用法,其使用到了 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. Verwenden Sie glob(), um Dateien zu finden

Die Funktionsnamen der meisten PHP-Funktionen können wörtlich verstanden werden. Wenn Sie jedoch glob() sehen, wissen Sie möglicherweise nicht, wofür es verwendet wird. Tatsächlich ist glob() dasselbe wie scandir() und kann zum Suchen von Dateien verwendet werden:

// 取得所有的后缀为PHP的文件  
$files = glob(‘*.php’);  
print_r($files);  
/* 输出: 
Array 
( 
[0] => phptest.php 
[1] => pi.php 
[2] => post_output.php 
[3] => test.php 
) 
*/

Sie können auch nach mehreren Suffixen suchen:

// 取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 
) 
*/

Sie können auch den Pfad hinzufügen:

$files = glob(‘../images/a*.jpg’);  
print_r($files);  
/* 输出: 
Array 
( 
[0] => ../images/apple.jpg 
[1] => ../images/art.jpg 
) 
*/

Wenn Sie möchten Für absolute Pfade, Sie können die Funktion realpath() aufrufen:

$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. Informationen zur Speichernutzung abrufen

Der Speicherrecyclingmechanismus von PHP ist bereits sehr leistungsfähig. Sie können auch PHP-Skripte verwenden, um den aktuellen For zu erhalten Um die Speichernutzung zu ermitteln, rufen Sie die Funktion „memory_get_usage()“ auf, um die aktuelle Speichernutzung zu ermitteln, und rufen Sie die Funktion „memory_get_peak_usage()“ auf, um die maximale Speichernutzung zu ermitteln. Der Referenzcode lautet wie folgt:

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. Informationen zur CPU-Nutzung abrufen

Sie können die CPU-Nutzung auch mit PHPs getrusage() ermitteln ist unter Windows verfügbar. Nicht verfügbar.

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 
) 
*/

Diese Struktur erscheint sehr unklar, es sei denn, Sie kennen die CPU sehr gut. Hier einige Erklärungen:

  • ru_oublock: Block-Ausgabeoperation

  • ru_inblock: Block-Eingabeoperation

  • ru_msgsnd: gesendete Nachricht

  • ru_msgrcv: empfangene Nachricht

  • ru_maxrss: maximale residente Satzgröße

  • ru_ixrss: Gesamtgröße des gemeinsam genutzten Speichers

  • ru_idrss: Gesamtgröße des nicht gemeinsam genutzten Speichers

  • ru_minflt: Seitenrecycling

  • ru_majflt: Seite ungültig

  • ru_nsignals: Signale empfangen

  • ru_nvcsw: Aktiver Kontextwechsel

  • ru_nivcsw: Passiver Kontextwechsel

  • ru_nswap: Swap-Bereich

  • ru_utime.tv_usec: Benutzermoduszeit (Mikrosekunden) )

  • ru_utime.tv_sec: Benutzermoduszeit (Sekunden)

  • ru_stime.tv_usec: Systemkernelzeit (Mikrosekunden)

  • ru_stime.tv_sec: Systemkernelzeit? (Sekunden)

Um zu sehen, wie viel CPU Ihr Skript verbraucht, müssen wir uns die „Benutzermoduszeit“ ansehen Wert von „System Kernel Time“. Die Sekunden- und Mikrosekundenteile werden separat bereitgestellt. Sie können den Mikrosekundenwert durch 1 Million dividieren und zum Sekundenwert addieren, um die Anzahl der Sekunden mit einem Bruchteil zu erhalten.

// sleep for 3 seconds (non-busy)  
sleep(3);  
$data = getrusage();  
echo “User time: “.  
($data[&#39;ru_utime.tv_sec&#39;] +  
$data[&#39;ru_utime.tv_usec&#39;] / 1000000);  
echo “System time: “.  
($data[&#39;ru_stime.tv_sec&#39;] +  
$data[&#39;ru_stime.tv_usec&#39;] / 1000000);  
/* 输出 
User time: 0.011552 
System time: 0 
*/

Ruhezustand nimmt keine Systemzeit in Anspruch, wir können uns das folgende Beispiel ansehen:

// loop 10 million times (busy)  
for($i=0;$i<10000000;$i++) {  
}  
$data = getrusage();  
echo “User time: “.  
($data[&#39;ru_utime.tv_sec&#39;] +  
$data[&#39;ru_utime.tv_usec&#39;] / 1000000);  
echo “System time: “.  
($data[&#39;ru_stime.tv_sec&#39;] +  
$data[&#39;ru_stime.tv_usec&#39;] / 1000000);  
/* 输出 
User time: 1.424592 
System time: 0.004204 
*/

Dies hat etwa 14 Sekunden CPU-Zeit in Anspruch genommen, fast die gesamte Benutzerzeit seitdem Es gibt keine Systemaufrufe.

Systemzeit ist die Zeit, die die CPU damit verbringt, Kernel-Anweisungen bei Systemaufrufen auszuführen. Hier ist ein Beispiel:

$start = microtime(true);  
// keep calling microtime for about 3 seconds  
while(microtime(true) – $start < 3) {  
}  
$data = getrusage();  
echo “User time: “.  
($data[&#39;ru_utime.tv_sec&#39;] +  
$data[&#39;ru_utime.tv_usec&#39;] / 1000000);  
echo “System time: “.  
($data[&#39;ru_stime.tv_sec&#39;] +  
$data[&#39;ru_stime.tv_usec&#39;] / 1000000);  
/* prints 
User time: 1.088171 
System time: 1.675315 
*/

Wir können sehen, dass das obige Beispiel mehr CPU verbraucht.

5. Systemkonstanten abrufen

PHP bietet sehr nützliche Systemkonstanten, mit denen Sie die aktuelle Zeilennummer (__LINE__), Datei (__FILE__), Verzeichnis (__DIR__) und Funktionsnamen abrufen können ( __FUNCTION__), Klassenname (__CLASS__), Methodenname (__METHOD__) und Namespace (__NAMESPACE__), ähnlich wie bei der C-Sprache.

Wir können davon ausgehen, dass diese Dinge hauptsächlich zum Debuggen verwendet werden, aber nicht unbedingt. Wir können beispielsweise ?__FILE__ verwenden, wenn wir andere Dateien einbinden (natürlich können Sie auch __DIR__ nach PHP 5.3 verwenden), wie folgt ist ein Beispiel.

// this is relative to the loaded script’s path  
// it may cause problems when running scripts from different directories  
require_once(‘config/database.php’);  
// this is always relative to this file’s path  
// no matter where it was included from  
require_once(dirname(__FILE__) . ‘/config/database.php’);

Im Folgenden wird __LINE__ verwendet, um einige Debug-Informationen auszugeben, die Ihnen beim Debuggen des Programms helfen:

// some code  
// …  
my_debug(“some debug message”, __LINE__);  
/* 输出 
Line 4: some debug message 
*/  
// some more code  
// …  
my_debug(“another debug message”, __LINE__);  
/* 输出 
Line 11: another debug message 
*/  
function my_debug($msg, $line) {  
echo “Line $line: $msg\n”;  
}

6. Generieren Sie eine eindeutige ID

Viele Freunde verwenden md5(), um eindeutige Zahlen zu generieren, aber md5() weist mehrere Mängel auf: 1. Unordnung, die zu einer Verringerung der Sortierleistung in der Datenbank führt. 2. Zu lang und erfordert mehr Speicherplatz. Tatsächlich verfügt PHP über eine Funktion zum Generieren einer eindeutigen ID. Diese Funktion ist uniqid(). Das Folgende ist die Verwendung:

// generate unique string  
echo uniqid();  
/* 输出 
4bd67c947233e 
*/  
// generate another unique string  
echo uniqid();  
/* 输出 
4bd67c9472340 
*/

Dieser Algorithmus wird basierend auf dem CPU-Zeitstempel generiert, sodass in einem ähnlichen Zeitraum die ersten paar Ziffern der ID gleich sind, was auch zum Sortieren praktisch ist ID, wenn Sie Duplikate besser vermeiden möchten, können Sie vor der ID ein Präfix hinzufügen, z. B.:

// 前缀  
echo uniqid(‘foo_’);  
/* 输出 
foo_4bd67d6cd8b8f 
*/  
// 有更多的熵  
echo uniqid(”,true);  
/* 输出 
4bd67d6cd8b926.12135106 
*/  
// 都有  
echo uniqid(‘bar_’,true);  
/* 输出 
bar_4bd67da367b650.43684647 
*/

7. Serialisierung

PHP序列化功能大家可能用的比较多,也比较常见,当你需要把数据存到数据库或者文件中是,你可以利用PHP中的serialize() 和 unserialize()方法来实现序列化和反序列化,代码如下: 

// 一个复杂的数组  
$myvar = array(  
‘hello’,  
42,  
array(1,’two’),  
‘apple’  
);  
// 序列化  
$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 
[2] => Array 
( 
[0] => 1 
[1] => two 
) 
[3] => apple 
) 
*/

如何序列化成json格式呢,放心,php也已经为你做好了,使用php 5.2以上版本的用户可以使用json_encode() 和 json_decode() 函数来实现json格式的序列化,代码如下: 

// a complex array  
$myvar = array(  
‘hello’,  
42,  
array(1,’two’),  
‘apple’  
);  
// convert to a string  
$string = json_encode($myvar);  
echo $string;  
/* prints 
["hello",42,[1,"two"],”apple”] 
*/  
// you can reproduce the original variable  
$newvar = json_decode($string);  
print_r($newvar);  
/* prints 
Array 
( 
[0] => hello 
[1] => 42 
[2] => Array 
( 
[0] => 1 
[1] => two 
) 
[3] => apple 
) 
*/

8、字符串压缩 

当我们说到压缩,我们可能会想到文件压缩,其实,字符串也是可以压缩的。PHP提供了 gzcompress() 和gzuncompress() 函数: 

$string =  
“Lorem ipsum dolor sit amet, consectetur  
adipiscing elit. Nunc ut elit id mi ultricies  
adipiscing. Nulla facilisi. Praesent pulvinar,  
sapien vel feugiat vestibulum, nulla dui pretium orci,  
non ultricies elit lacus quis ante. Lorem ipsum dolor  
sit amet, consectetur adipiscing elit. Aliquam  
pretium ullamcorper urna quis iaculis. Etiam ac massa  
sed turpis tempor luctus. Curabitur sed nibh eu elit  
mollis congue. Praesent ipsum diam, consectetur vitae  
ornare a, aliquam a nunc. In id magna pellentesque  
tellus posuere adipiscing. Sed non mi metus, at lacinia  
augue. Sed magna nisi, ornare in mollis in, mollis  
sed nunc. Etiam at justo in leo congue mollis.  
Nullam in neque eget metus hendrerit scelerisque  
eu non enim. Ut malesuada lacus eu nulla bibendum  
id euismod urna sodales. “;  
$compressed = gzcompress($string);  
echo “Original size: “. strlen($string).”\n”;  
/* 输出原始大小 
Original size: 800 
*/  
echo “Compressed size: “. strlen($compressed).”\n”;  
/* 输出压缩后的大小 
Compressed size: 418 
*/  
// 解压缩  
$original = gzuncompress($compressed);

几乎有50% 压缩比率。同时,你还可以使用 gzencode() 和 gzdecode() 函数来压缩,只不用其用了不同的压缩算法。 

以上就是8个开发必备的PHP功能,是不是都很实用呢?

Das obige ist der detaillierte Inhalt von8 wesentliche Funktionen für die PHP-Entwicklung. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn