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 相关文章推荐
mysql5详细安装教程
Jan 15 PHP
php开发环境配置记录
Jan 14 PHP
浅析php中三个等号(===)和两个等号(==)的区别
Aug 06 PHP
PHP把空格、换行符、中文逗号等替换成英文逗号的正则表达式
May 04 PHP
使用php语句将数据库*.sql文件导入数据库
May 05 PHP
php_imagick实现图片剪切、旋转、锐化、减色或增加特效的方法
Dec 15 PHP
php短址转换实现方法
Feb 25 PHP
php图片水印添加、压缩、剪切的封装类实现
Apr 18 PHP
PHP编程实现微信企业向用户付款的方法示例
Jul 26 PHP
yii2学习教程之5种内置行为类详解
Aug 03 PHP
php中错误处理操作实例分析
Aug 23 PHP
在thinkphp5.0路径中实现去除index.php的方式
Oct 16 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中全局变量global和$GLOBALS[]的区别分析
2012/08/06 PHP
2014年10个最佳的PHP图像操作库
2014/07/14 PHP
php 数组元素快速去重
2017/05/05 PHP
PHP通过GD库实现验证码功能示例
2019/02/23 PHP
laravel http 自定义公共验证和响应的方法
2019/09/29 PHP
Yii框架学习笔记之应用组件操作示例
2019/11/13 PHP
理解Javascript闭包
2013/11/01 Javascript
jquery实现页面图片等比例放大缩小功能
2014/02/12 Javascript
js/jquery判断浏览器的方法小结
2014/09/02 Javascript
深入理解javascript变量声明
2014/11/20 Javascript
js实现仿百度汽车频道选择汽车图片展示实例
2015/05/06 Javascript
JavaScript中string对象
2015/06/12 Javascript
JS实现兼容性较好的随屏滚动效果
2015/11/09 Javascript
vue2.0 axios跨域并渲染的问题解决方法
2018/03/08 Javascript
小程序分页实践之编写可复用分页组件
2019/07/18 Javascript
浅谈vue限制文本框输入数字的正确姿势
2019/09/02 Javascript
layui 实现二级弹窗弹出之后 关闭一级弹窗的方法
2019/09/18 Javascript
[31:01]2014 DOTA2国际邀请赛中国区预选赛5.21 CNB VS Orenda
2014/05/23 DOTA
[04:29]DOTA2亚洲邀请赛小组赛第一日 TOP10精彩集锦
2015/02/01 DOTA
Python列出一个文件夹及其子目录的所有文件
2016/06/30 Python
python 去除二维数组/二维列表中的重复行方法
2019/01/23 Python
Python使用到第三方库PyMuPDF图片与pdf相互转换
2019/05/03 Python
Python自定义函数计算给定日期是该年第几天的方法示例
2019/05/30 Python
树莓派4B安装Tensorflow的方法步骤
2020/07/16 Python
【HTML5】3D模型--百行代码实现旋转立体魔方实例
2016/12/16 HTML / CSS
澳大利亚领先的武术用品和健身器材供应商:SMAI
2019/03/24 全球购物
TOWER London官网:鞋子、靴子、运动鞋等
2019/07/14 全球购物
中国包裹转运寄送国际服务:Famiboat
2019/07/24 全球购物
2014年公司植树节活动方案
2014/03/04 职场文书
四风问题自我剖析材料
2014/10/07 职场文书
热情服务标语
2014/10/07 职场文书
工作收入住址证明
2014/10/28 职场文书
2016年暑期教师培训心得体会
2016/01/09 职场文书
《你在为谁工作》心得体会(共8篇)
2016/01/20 职场文书
Java实现聊天机器人完善版
2021/07/04 Java/Android
Vue Element plus使用方法梳理
2022/12/24 Vue.js