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 相关文章推荐
PHPMailer邮件类利用smtp.163.com发送邮件方法
Sep 11 PHP
php实现批量下载百度云盘文件例子分享
Apr 10 PHP
使用php批量删除数据库下所有前缀为prefix_的表
Jun 09 PHP
PHP 5.3和PHP 5.4出现FastCGI Error解决方法
Feb 12 PHP
PHP的swoole扩展安装方法详细教程
May 18 PHP
php 生成签名及验证签名详解
Oct 26 PHP
PHP实现的方程求解示例分析
Nov 11 PHP
PHP使用curl_multi实现并发请求的方法示例
Apr 29 PHP
PHP中rename()函数的妙用讲解
Feb 28 PHP
thinkphp整合系列之极验滑动验证码geetest功能
Jun 18 PHP
laravel5.1框架基础之Blade模板继承简单使用方法分析
Sep 05 PHP
thinkphp框架实现路由重定义简化url访问地址的方法分析
Apr 04 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中使用PDF文档功能
2006/10/09 PHP
PHP配置文件中最常用四个ini函数
2007/03/19 PHP
设置php页面编码的两种方法示例介绍
2014/03/03 PHP
ThinkPHP3.1数据CURD操作快速入门
2014/06/19 PHP
mysql_connect localhost和127.0.0.1的区别(网络层阐述)
2015/03/26 PHP
php操作access数据库的方法详解
2017/02/22 PHP
js escape,unescape解决中文乱码问题的方法
2010/05/26 Javascript
fancybox modal的完美解决(右上的X)
2012/10/30 Javascript
jquery删除提示框弹出是否删除对话框
2014/01/07 Javascript
点击标签切换和自动切换DIV选项卡
2014/08/10 Javascript
初步认识JavaScript函数库jQuery
2015/06/18 Javascript
详解JavaScript中的4种类型识别方法
2015/09/14 Javascript
详解页面滚动值scrollTop在FireFox与Chrome浏览器间的兼容问题
2015/12/03 Javascript
javascript与jquery中的this关键字用法实例分析
2015/12/24 Javascript
详解Nodejs基于mongoose模块的增删改查的操作
2016/12/21 NodeJs
bootstrap table表格使用方法详解
2017/04/26 Javascript
vue音乐播放器插件vue-aplayer的配置及其使用实例详解
2017/07/10 Javascript
layui实现table加载的示例代码
2018/08/14 Javascript
详细讲解如何创建, 发布自己的 Vue UI 组件库
2019/05/29 Javascript
jQuery实现checkbox全选、反选及删除等操作的方法详解
2019/08/02 jQuery
[05:13]TI4 中国战队 机场出征!!
2014/07/07 DOTA
解决PySide+Python子线程更新UI线程的问题
2019/01/11 Python
Python 限制线程的最大数量的方法(Semaphore)
2019/02/22 Python
numpy下的flatten()函数用法详解
2019/05/27 Python
python爬虫 爬取58同城上所有城市的租房信息详解
2019/07/30 Python
python中类的输出或类的实例输出为这种形式的原因
2019/08/12 Python
基于python全局设置id 自动化测试元素定位过程解析
2019/09/04 Python
python中Lambda表达式详解
2019/11/20 Python
tornado+celery的简单使用详解
2019/12/21 Python
JAVA软件工程师测试题
2014/07/25 面试题
电台实习生求职信
2014/02/25 职场文书
动物科学专业求职信
2014/07/27 职场文书
2014年妇幼卫生工作总结
2014/12/09 职场文书
本溪关门山导游词
2015/02/09 职场文书
2015年度校学生会工作总结报告
2015/05/23 职场文书
离婚民事起诉状
2015/08/03 职场文书