PHP一些有意思的小区别


Posted in PHP onDecember 06, 2006

单引号'和双引号"的区别: 
首先是单引号要比双引号执行效率要高,因为双引号会对内容进行预处理。 
例如:'$value' 输出字符 $value ; "$value"输出变量$value的值。 

char和varchar的区别: 
char是定长而varchar是变长,char的主要特点是存储方式预分配,varchar当它的数据长度发生变化时会影响其存储的页分配。 
char与varchar2是一对矛盾的统一体,两者是互补的关系.  
varchar2比char节省空间,在效率上比 char会稍微差一些,即要想获得效率,就必须牺牲一定的空间,这也就是我们在数据库设计上常说的‘以空间换效率'。  
varchar2 虽然比 char节省空间,但是如果一个varchar2列经常被修改,而且每次被修改的数据的长度不同,这会引起‘行迁移'(Row Migration)现象,而这造成多余的I/O,是数据库设计和调整中要尽力避免的,在这种情况下用 char代替varchar2会更好一些。 

mysql_connect和mysql_pconnect的区别 
引用exceed php club论坛上的朋友原话: 
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 相关文章推荐
PHP邮件专题
Oct 09 PHP
仿AS3实现PHP 事件机制实现代码
Jan 27 PHP
php中将html中的br换行符转换为文本输入中的换行符
Mar 26 PHP
使用PHP接收POST数据,解析json数据
Jun 28 PHP
php上传文件中文文件名乱码的解决方法
Nov 01 PHP
PHP与MYSQL中UTF8编码的中文排序实例
Oct 21 PHP
CI框架学习笔记(二) -入口文件index.php
Oct 27 PHP
php通过session防url攻击方法
Dec 10 PHP
PHP将Excel导入数据库及数据库数据导出至Excel的方法
Jun 24 PHP
php计算税后工资的方法
Jul 28 PHP
Symfony2学习笔记之插件格式分析
Mar 17 PHP
Windows 下安装 swoole 图文教程(php)
Jun 05 PHP
弄了个检测传输的参数是否为数字的Function
Dec 06 #PHP
PHP4 与 MySQL 数据库操作函数详解
Dec 06 #PHP
PHP 5.0 Pear安装方法
Dec 06 #PHP
让你的WINDOWS同时支持MYSQL4,MYSQL4.1,MYSQL5X
Dec 06 #PHP
PHP 开发工具
Dec 06 #PHP
一些常用的php函数
Dec 06 #PHP
PHP语法速查表
Dec 06 #PHP
You might like
PHP中计算字符串相似度的函数代码
2012/12/29 PHP
探讨PHP JSON中文乱码的解决方法详解
2013/06/06 PHP
php实现telnet功能示例
2014/04/08 PHP
php使用$_POST或$_SESSION[]向js函数传参
2014/09/16 PHP
隐藏Nginx或Apache以及PHP的版本号的方法
2016/01/03 PHP
PHP实现微信小程序人脸识别刷脸登录功能
2018/05/24 PHP
php设计模式之模板模式实例分析【星际争霸游戏案例】
2020/03/24 PHP
TP5框架页面跳转样式操作示例
2020/04/05 PHP
EditPlus注册码生成器(js代码实现)
2013/03/25 Javascript
三种动态加载js的jquery实例代码另附去除js方法
2014/04/30 Javascript
js使用正则实现ReplaceAll全部替换的方法
2014/07/18 Javascript
JQuery设置获取下拉菜单某个选项的值(比较全)
2014/08/05 Javascript
jQuery选择器源码解读(八):addCombinator函数
2015/03/31 Javascript
jQuery实现Tab选项卡切换效果简单演示
2015/11/23 Javascript
详解Vue 动态添加模板的几种方法
2017/04/25 Javascript
JavaScript获取tr td 的三种方式全面总结(推荐)
2017/08/15 Javascript
javascript按钮禁用和启用的效果实例代码
2017/10/29 Javascript
详解如何在vue项目中引入elementUI组件
2018/02/11 Javascript
JavaScript中七种流行的开源机器学习框架
2018/10/11 Javascript
JavaScript学习教程之cookie与webstorage
2019/06/23 Javascript
通过实例了解Javascript柯里化流程
2020/03/03 Javascript
为react组件库添加typescript类型提示的方法
2020/06/15 Javascript
PyQt5利用QPainter绘制各种图形的实例
2017/10/19 Python
解析Tensorflow之MNIST的使用
2020/06/30 Python
韩国流行时尚女装网站:Dintchina(中文)
2018/07/19 全球购物
团员的自我评价
2013/12/01 职场文书
2013年员工自我评价范文
2013/12/27 职场文书
村党支部书记四风问题个人对照检查材料思想汇报
2014/10/06 职场文书
副总经理党的群众路线教育实践活动个人对照检查材料思想汇报
2014/10/06 职场文书
党的群众路线教育实践活动个人批评与自我批评
2014/10/16 职场文书
全国法制宣传日活动总结2014
2014/11/01 职场文书
黄山导游词
2015/01/31 职场文书
2016学习医德医风心得体会
2016/01/25 职场文书
合作意向书怎么写
2019/06/24 职场文书
SpringBoot项目中控制台日志的保存配置操作
2021/06/18 Java/Android
spring注解 @PropertySource配置数据源全流程
2022/03/25 Java/Android