仓酷云

标题: PHP网页编程之PHP教程:9个适用的PHP函数 [打印本页]

作者: 小魔女    时间: 2015-2-3 23:43
标题: PHP网页编程之PHP教程:9个适用的PHP函数
学习了六个多月PHP了,还是个新手,在这里受到了很多人的帮助,谢谢你们!   </p> 即便利用 PHP 多年,也会偶尔发明一些不曾懂得的函数和功效。个中有些长短常有效的,但没有失掉充实使用。并非一切人城市从头至尾一页一页地浏览手册和函数参考!
1、恣意参数数量的函数
你能够已晓得,PHP 答应界说可选参数的函数。但也有完整答应恣意数量的函数参数的办法。以下是可选参数的例子:
  1. // function with 2 optional arguments function foo($arg1 = '', $arg2 = '') { echo "arg1: $arg1\n"; echo "arg2: $arg2\n"; } foo('hello','world'); /* prints: arg1: hello arg2: world */ foo(); /* prints: arg1: arg2: */
复制代码
如今让咱们看看若何创立可以承受任何参数数量的函数。这一次需求利用 func_get_args() 函数:
  1. // yes, the argument list can be empty function foo() { // returns an array of all passed arguments $args = func_get_args(); foreach ($args as $k => $v) { echo "arg".($k+1).": $v\n"; } } foo(); /* prints nothing */ foo('hello'); /* prints arg1: hello */ foo('hello', 'world', 'again'); /* prints arg1: hello arg2: world arg3: again */
复制代码
2、利用 Glob() 查找文件
很多 PHP 函数具有长描写性的称号。但是能够会很难说出 glob() 函数能做的工作,除非你已经由过程屡次利用并熟习了它。可以把它看做是比 scandir() 函数更壮大的版本,可以依照某种形式搜刮文件。
  1. // get all php files $files = glob('*.php'); print_r($files); /* output looks like: Array ( [0] => phptest.php [1] => pi.php [2] => post_output.php [3] => test.php ) */
复制代码
你可以像如许取得多个文件:
  1. // get all php files AND txt files $files = glob('*.{php,txt}', GLOB_BRACE); print_r($files); /* output looks like: Array ( [0] => phptest.php [1] => pi.php [2] => post_output.php [3] => test.php [4] => log.txt [5] => test.txt ) */
复制代码
请注重,这些文件实际上是可以前往一个途径,这取决于查询前提:
  1. $files = glob('../images/a*.jpg'); print_r($files); /* output looks like: Array ( [0] => ../images/apple.jpg [1] => ../images/art.jpg ) */
复制代码
假如你想取得每一个文件的完全途径,你可以挪用 realpath() 函数:
  1. $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_limit() 函数。
  1. echo "Initial: ".memory_get_usage()." bytes \n"; /* prints Initial: 361400 bytes */ // let's use up some memory for ($i = 0; $i < 100000; $i++) { $array []= md5($i); } // let's remove half of the array 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"; /* prints Peak: 13687072 bytes */
复制代码
4、CPU 利用信息
为此,咱们要使用 getrusage() 函数。请记住这个函数不合用于 Windows 平台。
  1. print_r(getrusage()); /* prints 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 ) */
复制代码
这能够看起来有点奥秘,除非你已有体系办理员权限。以下是每一个值的详细申明(你不需求记住这些):
  1. ru_oublock: block output operations ru_inblock: block input operations ru_msgsnd: messages sent ru_msgrcv: messages received ru_maxrss: maximum resident set size ru_ixrss: integral shared memory size ru_idrss: integral unshared data size ru_minflt: page reclaims ru_majflt: page faults ru_nsignals: signals received ru_nvcsw: voluntary context switches ru_nivcsw: involuntary context switches ru_nswap: swaps ru_utime.tv_usec: user time used (microseconds) ru_utime.tv_sec: user time used (seconds) ru_stime.tv_usec: system time used (microseconds) ru_stime.tv_sec: system time used (seconds)
复制代码
要晓得剧本损耗几何 CPU 功率,咱们需求看看 ‘user time’ 和 ’system time’ 两个参数的值。秒和微秒局部默许是独自供应的。你可以除以 100 万微秒,并加上秒的参数值,失掉一个十进制的总秒数。让咱们来看一个例子:
  1. // 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); /* prints User time: 0.011552 System time: 0 */
复制代码
虽然剧本运转用了大约 3 秒钟,CPU 利用率却十分十分低。由于在睡眠运转的过程当中,该剧本实践上不用耗 CPU 资本。还有很多其他的义务,能够需求一段工夫,但不占用相似守候磁盘操作等 CPU 工夫。因而正如你所看到的,CPU 利用率和运转工夫的实践长度其实不老是不异的。上面是一个例子:
  1. // yes, the argument list can be empty function foo() { // returns an array of all passed arguments $args = func_get_args(); foreach ($args as $k => $v) { echo "arg".($k+1).": $v\n"; } } foo(); /* prints nothing */ foo('hello'); /* prints arg1: hello */ foo('hello', 'world', 'again'); /* prints arg1: hello arg2: world arg3: again */ 0
复制代码
这花了大约 1.4 秒的 CPU 工夫,但几近都是用户工夫,由于没有体系挪用。体系工夫是指消费在履行法式的体系挪用时的 CPU 开支。上面是一个例子:
  1. // yes, the argument list can be empty function foo() { // returns an array of all passed arguments $args = func_get_args(); foreach ($args as $k => $v) { echo "arg".($k+1).": $v\n"; } } foo(); /* prints nothing */ foo('hello'); /* prints arg1: hello */ foo('hello', 'world', 'again'); /* prints arg1: hello arg2: world arg3: again */ 1
复制代码
如今咱们有相当多的体系工夫占用。这是由于剧本屡次挪用 microtime() 函数,该函数需求向操作体系收回恳求,以获得所需工夫。你也能够会注重到运转工夫加起来不到 3 秒。这是由于有能够在办事器上同时存在其他历程,而且剧本没有 100% 利用 CPU 的全部 3 秒延续工夫。
5、魔术常量
PHP 供应了获得以后行号 (__LINE__)、文件途径 (__FILE__)、目次途径 (__DIR__)、函数名 (__FUNCTION__)、类名 (__CLASS__)、办法名 (__METHOD__) 和定名空间 (__NAMESPACE__) 等有效的魔术常量。在这篇文章中不作逐一引见,然而我将告知你一些用例。当包括其他剧本文件时,利用 __FILE__ 常量(或利用 PHP5.3 新具有的 __DIR__ 常量):
  1. // yes, the argument list can be empty function foo() { // returns an array of all passed arguments $args = func_get_args(); foreach ($args as $k => $v) { echo "arg".($k+1).": $v\n"; } } foo(); /* prints nothing */ foo('hello'); /* prints arg1: hello */ foo('hello', 'world', 'again'); /* prints arg1: hello arg2: world arg3: again */ 2
复制代码
利用 __LINE__ 使得调试更加轻松。你可以跟踪到详细行号。
  1. // yes, the argument list can be empty function foo() { // returns an array of all passed arguments $args = func_get_args(); foreach ($args as $k => $v) { echo "arg".($k+1).": $v\n"; } } foo(); /* prints nothing */ foo('hello'); /* prints arg1: hello */ foo('hello', 'world', 'again'); /* prints arg1: hello arg2: world arg3: again */ 3
复制代码
6、生成独一标识符
某些场景下,能够需求生成一个独一的字符串。我看到良多人利用 md5() 函数,即便它其实不完整意味着这个目标:
  1. // yes, the argument list can be empty function foo() { // returns an array of all passed arguments $args = func_get_args(); foreach ($args as $k => $v) { echo "arg".($k+1).": $v\n"; } } foo(); /* prints nothing */ foo('hello'); /* prints arg1: hello */ foo('hello', 'world', 'again'); /* prints arg1: hello arg2: world arg3: again */ 4
复制代码
There is actually a PHP function named uniqid() that is meant to be used for this.
  1. // yes, the argument list can be empty function foo() { // returns an array of all passed arguments $args = func_get_args(); foreach ($args as $k => $v) { echo "arg".($k+1).": $v\n"; } } foo(); /* prints nothing */ foo('hello'); /* prints arg1: hello */ foo('hello', 'world', 'again'); /* prints arg1: hello arg2: world arg3: again */ 5
复制代码
你能够会注重到,虽然字符串是独一的,前几个字符倒是相似的,这是由于生成的字符串与办事器工夫相干。但实践上也存在友爱的一方面,因为每一个重生成的 ID 会按字母按次分列,如许排序就变得很复杂。为了削减反复的几率,你可以传递一个前缀,或第二个参数来增添熵:
  1. // yes, the argument list can be empty function foo() { // returns an array of all passed arguments $args = func_get_args(); foreach ($args as $k => $v) { echo "arg".($k+1).": $v\n"; } } foo(); /* prints nothing */ foo('hello'); /* prints arg1: hello */ foo('hello', 'world', 'again'); /* prints arg1: hello arg2: world arg3: again */ 6
复制代码
这个函数将发生比 md5() 更短的字符串,能节俭一些空间。
7、序列化
你有无碰到过需求在数据库或文本文件存储一个庞杂变量的情形?你能够没能想出一个格局化字符串并转换成数组或对象的好办法,PHP 已为你筹办好此功效。有两种序列化变量的盛行办法。上面是一个例子,利用 serialize() 和 unserialize() 函数:
  1. // yes, the argument list can be empty function foo() { // returns an array of all passed arguments $args = func_get_args(); foreach ($args as $k => $v) { echo "arg".($k+1).": $v\n"; } } foo(); /* prints nothing */ foo('hello'); /* prints arg1: hello */ foo('hello', 'world', 'again'); /* prints arg1: hello arg2: world arg3: again */ 7
复制代码
这是原生的 PHP 序列化办法。但是,因为 JSON 最近几年来大受接待,PHP5.2 中已到场了对 JSON 格局的撑持。如今你可使用 json_encode() 和 json_decode() 函数:
  1. // yes, the argument list can be empty function foo() { // returns an array of all passed arguments $args = func_get_args(); foreach ($args as $k => $v) { echo "arg".($k+1).": $v\n"; } } foo(); /* prints nothing */ foo('hello'); /* prints arg1: hello */ foo('hello', 'world', 'again'); /* prints arg1: hello arg2: world arg3: again */ 8
复制代码
这将更加卓有成效,特别与 JavaScript 等很多其他言语兼容。但是关于庞杂的对象,某些信息能够会丧失。
8、紧缩字符串
在谈到紧缩时,咱们凡是想到文件紧缩,如 ZIP 紧缩等。在 PHP 中字符串紧缩也是能够的,但不触及任何紧缩文件。鄙人面的例子中,咱们要使用 gzcompress() 和 gzuncompress() 函数:
  1. // yes, the argument list can be empty function foo() { // returns an array of all passed arguments $args = func_get_args(); foreach ($args as $k => $v) { echo "arg".($k+1).": $v\n"; } } foo(); /* prints nothing */ foo('hello'); /* prints arg1: hello */ foo('hello', 'world', 'again'); /* prints arg1: hello arg2: world arg3: again */ 9
复制代码
这类操作的紧缩率能到达 50% 摆布。别的的函数 gzencode() 和 gzdecode() 能到达相似了局,经由过程利用分歧的紧缩算法。
9、注册中断功效
有一个函数叫做 register_shutdown_function(),可让你在某段剧本完成运转之前,履行一些指定代码。假定你需求在剧本履行停止前捕捉一些基准统计信息,例如运转的工夫长度:
  1. // get all php files $files = glob('*.php'); print_r($files); /* output looks like: Array ( [0] => phptest.php [1] => pi.php [2] => post_output.php [3] => test.php ) */ 0
复制代码
这仿佛微乎其微,你只需求在剧本运转的最初添加相干代码。然而假如你挪用过 exit() 函数,该代码将没法运转。另外,假如有一个致命的毛病,或剧本被用户不测终止,它能够没法再次运转。当你利用 register_shutdown_function() 函数,代码将持续履行,不管剧本是不是中断运转:
  1. // get all php files $files = glob('*.php'); print_r($files); /* output looks like: Array ( [0] => phptest.php [1] => pi.php [2] => post_output.php [3] => test.php ) */ 1
复制代码
英文原稿:9 Useful PHP Functions and Features You Need to Know Nettuts

不断巩固,摸透大部分PHP常用函数,并可理解OOP,MYSQL优化,以及模板
作者: 因胸联盟    时间: 2015-2-4 06:09
没接触过框架的人,也不用害怕,其实框架就是一种命名规范及插件,学会一个框架其余的框架都很好上手的。
作者: 兰色精灵    时间: 2015-2-7 12:19
学好程序语言,多些才是王道,写两个小时代码的作用绝对超过看一天书,这个我是深有体会(顺便还能练打字速度)。
作者: 老尸    时间: 2015-2-21 20:58
要进行开发,搭建环境是首先需要做的事,windows下面我习惯把环境那个安装在C盘下面,因为我配的环境经常出现诡异事件,什么事都没做环境有的时候就不能用啦。
作者: 若天明    时间: 2015-3-6 21:35
找到的的资料很多都是在论坛里的,需要注册,所以我一般没到一个论坛都注册一个id,所有的id都注册成一样的,这样下次再进来的时候就不用重复注册啦。当然有些论坛的某些资料是需要的付费的。
作者: 蒙在股里    时间: 2015-3-8 18:21
找到的的资料很多都是在论坛里的,需要注册,所以我一般没到一个论坛都注册一个id,所有的id都注册成一样的,这样下次再进来的时候就不用重复注册啦。当然有些论坛的某些资料是需要的付费的。
作者: 爱飞    时间: 2015-3-16 09:42
最后祝愿,php会给你带来快乐的同时 你也会给他带来快乐。
作者: 谁可相欹    时间: 2015-3-17 02:07
这些中手常用的知识,当你把我说的这些关键字都可以熟练运用的时候,你可以选择自己
作者: 小魔女    时间: 2015-3-23 12:47
个人呢觉得,配wamp 最容易漏的一步就是忘了把$PHP$目录下的libmysql.dll拷贝到windows系统目录的system32目录下,还有重启apache。
作者: 透明    时间: 2015-3-27 12:11
环境搭建好,当你看见你的浏览器输出“it works\\\\\\\"时你一定是喜悦的。在你解决问题的时候,我强烈建议多读php手册。
作者: admin    时间: 2015-3-28 10:54
基础有没有对学习php没有太大区别,关键是兴趣。
作者: 若相依    时间: 2015-4-17 19:47
实践是检验自己会不会的真理。
作者: 变相怪杰    时间: 2015-4-27 23:23
首先声明:我是一个菜鸟,是一个初学者。学习了一段php后总是感觉自己没有提高,无奈。经过反思我认为我学习过程中存在很多问题,我改变了学习方法后自我感觉有了明显的进步。
作者: 分手快乐    时间: 2015-5-1 10:10
环境搭建好,当你看见你的浏览器输出“it works\\\\\\\"时你一定是喜悦的。在你解决问题的时候,我强烈建议多读php手册。
作者: 只想知道    时间: 2015-5-1 14:38
如果你可以写完像留言板这样的程序,那么你可以去一些别人的代码了,
作者: 精灵巫婆    时间: 2015-5-6 02:09
当然这种网站的会员费就几十块钱。
作者: 冷月葬花魂    时间: 2015-6-5 00:37
开发工具也会慢慢的更专业,每个公司的可能不一样,但是zend studio是个大伙都会用的。
作者: 小妖女    时间: 2015-6-14 20:35
至于模板嘛,各位高人一直以来就是争论不休,我一只小菜鸟就不加入战团啦,咱们新手还是多学点东西的好。
作者: 再见西城    时间: 2015-6-18 21:31
这些都是最基本最常用功能,我们这些菜鸟在系统学习后,可以先对这些功能深入研究。
作者: 简单生活    时间: 2015-6-29 04:11
因为blog这样的可以让你接触更多要学的知识,可以接触用到类,模板,js ,ajax




欢迎光临 仓酷云 (http://ckuyun.com/) Powered by Discuz! X3.2