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
PHP中的正规表达式(一)
Oct 09 PHP
php中判断文件存在是用file_exists还是is_file的整理
Sep 12 PHP
用php制作简单分页(从数据库读取记录)的方法详解
May 04 PHP
解析php中curl_multi的应用
Jul 17 PHP
php中调用其他系统http接口的方法说明
Feb 28 PHP
教你如何在CI框架中使用 .htaccess 隐藏url中index.php
Jun 09 PHP
PHP+jQuery 注册模块开发详解
Oct 14 PHP
php实现字符串首字母转换成大写的方法
Mar 17 PHP
PHPStrom中实用的功能和快捷键大全
Sep 23 PHP
php微信公众号开发(3)php实现简单微信文本通讯
Dec 15 PHP
Symfony查询方法实例小结
Jun 28 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
Apache, PHP在Windows 9x/NT下的安装与配置 (二)
2006/10/09 PHP
zend optimizer在wamp的基础上安装图文教程
2013/10/26 PHP
php图片缩放实现方法
2014/02/20 PHP
基于laravel缓冲cache的用法详解
2019/10/23 PHP
Laravel5.1 框架表单验证操作实例详解
2020/01/07 PHP
php面向对象基础详解【星际争霸游戏案例】
2020/01/23 PHP
javascript 出生日期和身份证判断大全
2008/11/13 Javascript
javascript 尚未实现错误解决办法
2008/11/27 Javascript
Firefox window.close()的使用注意事项
2009/04/11 Javascript
用jquery实现学校的校历(asp.net+jquery ui 1.72)
2010/01/01 Javascript
html页面显示年月日时分秒和星期几的两种方式
2013/08/20 Javascript
JavaScript获取元素尺寸和大小操作总结
2015/02/27 Javascript
js获取鼠标位置实例详解
2015/12/09 Javascript
基于jQuery实现以手风琴方式展开和折叠导航菜单
2016/01/28 Javascript
Js的Array数组对象详解
2016/02/22 Javascript
Mac下使用charles遇到的问题以及解决办法
2017/01/10 Javascript
AngularJS constant和value区别详解
2017/02/28 Javascript
Vue2.x中的Render函数详解
2017/05/30 Javascript
详解Vue项目编译后部署在非网站根目录的解决方案
2018/04/26 Javascript
如何在vue里面优雅的解决跨域(路由冲突问题)
2019/01/20 Javascript
vue+element实现表单校验功能
2019/05/20 Javascript
vue 实现特定条件下绑定事件
2019/11/09 Javascript
[08:44]和酒神一起战斗 DOTA2教你做大人
2014/03/27 DOTA
python回调函数的使用方法
2014/01/23 Python
微信跳一跳python辅助脚本(总结)
2018/01/11 Python
Python实现读取机器硬件信息的方法示例
2018/06/09 Python
pandas 按照特定顺序输出的实现代码
2018/07/10 Python
python实现飞机大战微信小游戏
2020/03/21 Python
Python 调用 Outlook 发送邮件过程解析
2019/08/08 Python
HTML5 图片悬停放大的实现代码示例
2019/12/04 HTML / CSS
行政专员工作职责
2013/12/22 职场文书
十佳教师事迹材料
2014/01/11 职场文书
社会实践的活动方案
2014/08/22 职场文书
农业局党的群众路线教育实践活动整改方案
2014/09/20 职场文书
小学运动会加油稿
2015/07/22 职场文书
CentOS8.4安装Redis6.2.6的详细过程
2021/11/20 Redis