您当前的位置: 首页 > 网站编程 > PHP教程 > PHP一些有意思的小知识

PHP一些有意思的小知识

作者:不详 来源:网络 发布时间: 2010-11-02 13:51 点击:
单引号'和双引号的区别: 首先是单引号要比双引号执行效率要高,因为双引号会对内容进行预处理。 例如:'$value'输出字符$value;$value输出变量$value的值。 char和varchar的区别: char是定长而varchar是变长,char的主要特点是存储方式预分配,varchar当它的数据长度

PHP一些有意思的小知识

单引号'和双引号"的区别:

首先是单引号要比双引号执行效率要高,因为双引号会对内容进行预处理。

例如:'$value'输出字符$value;"$value"输出变量$value的值。

char和varchar的区别:

char是定长而varchar是变长,char的主要特点是存储方式预分配,varchar当它的数据长度发生变化时会影响其存储的页分配。

char与varchar2是一对矛盾的统一体,两者是互补的关系.

varchar2比char节省空间,在效率上比char会稍微差一些,即要想获得效率,就必须牺牲一定的空间,这也就是我们在数据库设计上常说的‘以空间换效率'。

varchar2虽然比char节省空间,但是如果一个varchar2列经常被修改,而且每次被修改的数据的长度不同,这会引起‘行迁移'(RowMigration)现象,而这造成多余的I/O,是数据库设计和调整中要尽力避免的,在这种情况下用char代替varchar2会更好一些。

mysql_connect和mysql_pconnect的区别

引用exceedphpclub论坛上的朋友原话:

php中mysql_pconnect()的实现方式:

其实mysql_pconnect()本身并没有做太多的处理,它唯一做的只是在php运行结束后不主动close掉mysql的连接.

mysql_pconnect()与此同时mysql_connect()的区别:

cgi方式下:

在php经cgi方式运行时pconnect和connect是基本没有区别的,因为cgi方式是每一个php访问起一个进程,访问结束后进程也就结束了,资源也全释放了.

apache模块方式下:

区别在于当php以apache模块方式运行时,由于apache有使用进程池,一个httpd进程结束后会被放回进程池,这也就使得用pconnect打开的的那个mysql连接资源不被释放,于是有下一个连接请求时就可以被复用.

这就使得在apache并发访问量不大的时候,由于使用了pconnect,php节省了反复连接db的时间,使得访问速度加快.这应该是比较好理解的.

但是在apache并发访问量大的时候,如果使用pconnect,会由于之前的一些httpd进程占用的mysql连接没有close,则可能会因为mysql已经达到最大连接着,使得之后的一些请求永远得不到满足.

例如:

若mysql最大连接数设为500,而apache的最大同时访问数设为2000

假设所有访问都会要求访问db,而且操作时间会比较长

当前500个请求的httpd都没有结束的时候...之后的httd进程都是无法连接到mysql的(因已经达到mysql最大连接数).只有当前500个httpd进程结束或被复用才可以连接得到了mysql.

其实这个也很好解释了xgy_p的测试中若操作比较简单,pconnect比connect效率高很多,而且跟使用jsp的连接池的速度比较接近.因为这个时候httpd进程可以不断的给复用.

而当DB操作复杂,耗时较长时,因httpd会fork很多并发进程处理,而先产生的httpd进程不释放db连接,使得后产生的httpd进程无法连上db.因为这样没有复用其它httpd进程的mysql连接.于是会就产生很多连接超时,像一开始的1000个并发连接测试说几乎都是连接超时就是这个原因.

---

(反进来看jsp用的如果是纯粹的db连接池,则不会有因为达到mysql连接上限而连不上的问题,因为jsp的连接池会使得可以等待其它连接使用完毕并复用.)

因此在并发访问量不高时,使用pconnect可以简单提高访问速度,但在并发量增大后,是否再使用pconnect就要看程序员的选择了..

就我个人认为,php现在对mysql的连接并没有真正用到连接池,pconnect也只是相当于借了apache的进程池来用,所以在并发访问量大的时候pconnect并不能很好的提高访问DB效率.在这一点上.php的确比不上jsp.

就目前的这种情况,如果并发量大的话,我个人建议最好还用mysql_connect.

include和require的区别

以下取自phpchina.cn

php的require()性能与include()相类似。不同之处在于,对include()来说,在include()执行时文件每次都要进行读取和评估;而对于require()来说,文件只处理一次(实际上,文件内容替换了require()语句)。这就意味着如果有包含这些指令之一的代码和可能执行多次的代码,则使用require()效率比较高。另一方面,如果每次执行代码时相读取不同的文件,或者有通过一组文件叠代的循环,就使用include(),因为可以给想要包括的文件名设置一个变量,当参数为include()时使用这个变量。

 

include在执行时,如果include进来的文件发生错误的话,不会立刻停止;而require则会立刻终止程序,不再往下执行。

include可以用在循环;require不行。

 

以下取自ricky

1,require是无条件包含也就是如果一个流程里加入require,无论条件成立与否都会先执行require

这个已经不适用了,因为require可以包含变量指向的文件如

if($a=1){

$file='1.php';

}else{

$file='2.php';

}

require($file);

2,包含文件不存在或者语法错误的时候require是致命的,include不是

3,include有返回值,而require没有(可能因为如此require的速度比include快)

$login=include('test.php');

if(!empty($login)){

echo"文件包含成功";

}else{

echo"文件包含失败";

}

引用文件的方法有两种:require及include。两种方式提供不同的使用弹性。

require的使用方法如require("MyRequireFile.php");。这个函数通常放在PHP程序的最前面,PHP程序在执行前,就会先读入require所指定引入的文件,使它变成PHP程序网页的一部份。常用的函数,亦可以这个方法将它引入网页中。

include使用方法如include("MyIncludeFile.php");。这个函数一般是放在流程控制的处理部分中。PHP程序网页在读到include的文件时,才将它读进来。这种方式,可以把程序执行时的流程简单化。

isset()和empty()的区别

两者都是测试变量用的,但是isset()是测试变量是否被赋值,而empty()是测试一个已经被赋值的变量是否为空。

如果一个变量没被赋值就引用在php里是被允许的,但会有notice提示,如果一个变量被赋空值,$foo=""或者$foo=0或者$foo=false,那么empty($foo)返回真,isset($foo)也返回真,就是说赋空值不会注销一个变量。

要注销一个变量,可以用unset($foo)或者$foo=NULL

分享到:
本文"PHP一些有意思的小知识"由远航站长收集整理而来,仅供大家学习与参考使用。更多网站制作教程尽在远航站长站。
顶一下
(0)
0%
踩一下
(0)
0%
[点击 次] [返回上一页] [打印]
发表评论
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
评价:
表情:
用户名: 密码: 验证码:
关于本站 - 联系我们 - 网站声明 - 友情连接- 网站地图 - 站点地图 - 返回顶部
Copyright © 2007-2013 www.yhzhan.com(远航站长). All Rights Reserved .
远航站长:为中小站长提供最佳的学习与交流平台,提供网页制作与网站编程等各类网站制作教程.
官方QQ:445490277 网站群:26680406 网站备案号:豫ICP备07500620号-4