PHP中一些有意思的小知识 (转载)

转载 2007年09月17日 16:30:00
 

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

  首先是单引号要比双引号执行效率要高,因为双引号会对内容进行预处理。例如:'$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

  http://www.ikown.com/html/action-show-id-99.html

 

用星际快速入门PHP面向对象编程(很有意思的教程 赞赞赞)

用星际快速入门PHP面向对象编程(很有意思的教程 赞赞赞)

10 个有意思的 PHP 教程

今天我为大家挑选了 10 个关于 PHP 的教程,设计到 pChart、投票、图片过滤、facebook 连接器等等,希望对你有用。 1. pChart Revisited with Googl...

最短的PHP微博程序代码【很有意思】

最短的PHP微博程序。基本需求是:1.无乱码(最好UTF-8)。 2.有输入框可以发布新信息。3.提交后马上可以看到新发的内容。4.必须使用POST方式提交。5.信息后面要有时间标记。6.不能发布任何...

php实现一段非常有意思的代码(可扩展)

一段很有意思的php代码,可以动态的实现成员函数以及成员方法的添加,扩展性非常强。...
  • wyfhist
  • wyfhist
  • 2015年06月02日 00:04
  • 1814

在PHP中使用Curl 和其中部分有意思的参数

在PHP中使用Curl  Posted 09月 14th, 2008 归属于PHP  原文(英文)地址: http://www.phpit.net/article/using-curl-php 版...

PHP 错误处理(很有意思)

PHP 错误处理在 PHP 中,默认的错误处理很简单。一条错误消息会被发送到浏览器,这条消息带有文件名、行号以及描述错误的消息。 PHP 错误处理 在创建脚本和 Web 应用程序时,错误处理是一个重要...

(转载)一篇很有意思的文章,关于C语言学习的。

因为我也看过Schildt的作品,无意中在网上看到这篇文章,就转来了。本文转载自 刹那永恒 的博客:http://blogold.chinaunix.net/u/12391/showart_10430...

关于Java你可能不知道的10件事 (转载的文章,感觉比较有意思,等有空的时候好好玩一下)

呃,你是不是写Java已经有些年头了?还依稀记得这些吧: 那些年,它还叫做Oak;那些年,OO还是个热门话题;那些年,C++同学们觉得Java是没有出路的;那些年,Applet还风头正劲…… 但我打...

OC开发== MVVM [感觉写的不错,有意思,转载了]

不要听吹牛逼什么前端MVVM框架就是好,其实都是一帮没学好分层设计的搞出来的,让你彻底看清前端MVVM的本质 最近前端圈子里面,发现大家都在热炒概念,什么knockout,angularJs,都...

【转载】有意思的文章: 关于跨平台与用户体验

导读:昨天,作者陈皓对于Android开发应用写了一篇《Android将允许纯C/C++开发应用》文章,我在文中发表了一些“很不中听”的观点,在我早晨上班刚打开电脑的时候,Gtalk上同学就发来了一条...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:PHP中一些有意思的小知识 (转载)
举报原因:
原因补充:

(最多只允许输入30个字)