Heim >Backend-Entwicklung >PHP-Tutorial >8 wesentliche Funktionen für die PHP-Entwicklung
[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.
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['ru_utime.tv_sec'] + $data['ru_utime.tv_usec'] / 1000000); echo “System time: “. ($data['ru_stime.tv_sec'] + $data['ru_stime.tv_usec'] / 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['ru_utime.tv_sec'] + $data['ru_utime.tv_usec'] / 1000000); echo “System time: “. ($data['ru_stime.tv_sec'] + $data['ru_stime.tv_usec'] / 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['ru_utime.tv_sec'] + $data['ru_utime.tv_usec'] / 1000000); echo “System time: “. ($data['ru_stime.tv_sec'] + $data['ru_stime.tv_usec'] / 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!