PHP的问题:全面阐述PHP网站设计的问题(3)_PHP技巧_黑客防线网安服务器维护基地--Powered by WWW.RONGSEN.COM.CN

PHP的问题:全面阐述PHP网站设计的问题(3)

作者:黑客防线网安PHP教程基地 来源:黑客防线网安PHP教程基地 浏览次数:0

本篇关键词:网站设计PHP
黑客防线网安网讯:  操作符    ==不中用。    "foo"==TRUE,和"foo"==0…但,当然TRUE!=0。    ==会將两边转成数字,如果可能的话,这意味着它將转成floats如果可能。所以大的16进制字符串(如...
  操作符
  
  ==不中用
  
  "foo"==TRUE和"foo"==0…但当然TRUE!=0
  
  ==会將两边转成数字,如果可能的话,这意味着它將转成floats如果可能。所以大的16进制字符串(如,passwordhashes)可能偶然会比较成true,尽管它们不一样。就连JavaScript都不会这样做。
  
  由于某些原因,"6"=="6","4.2"=="4.20",和"133"=="0133"。但注意133!=0133,因为0133是八进制的。
  
  ===比较值和类型…除了对象,只有两边实际上是同一对象才为true!对于对象,==比较值(或每个属性)和类型,这又是===比较任何非对象类型的行为。好玩吗?
  
  比较大小也好不到哪去。
  
  甚至行为都不一致:NULL<-1,而NULL==0。排序也因此不确定;它依赖于在排序中比较元素的算法的顺序。
  
  比较操作符尝试排序数组,以两种不同的方式:首先按长度,然后按元素。如果它们有相同数量的元素但不同的keys,它们是不可比的。
  
  对象比较比其它比较做得更多…除了那些即不小于也不大于的对象。
  
  为了类型更安全的==比较,我们有===。为了类型更安全的<比较,我们有…什么也没有。"123"<"0124",通常,不管你怎么做。类型转换也无济于事。
  
  尽管上面的举动很疯狂,但却明确拒绝Perl’s的字符串paris和算术运行符,PHP没有重载+.+就是通常的+,而。是通常的连接符。
  
  []下标操作符也可以拼写成{}。
  
  []可以用于任何变量,不光是字符串和数组。它返回null,无错误警告。
  
  []仅能获取单个元素。
  
  foo()[0]是个语法错误。(已在PHP5.4中修复)
  
  不像(从字面上看)任何其它语言都有的类似的操作符,?:是左结合的。因此:
  
  $arg='T';
  
  $vehicle=(($arg=='B')?'bus':
  
  ($arg=='A')?'airplane':
  
  ($arg=='T')?'train':
  
  ($arg=='C')?'car':
  
  ($arg=='H')?'horse':
  
  'feet');
  
  echo$vehicle;
  
  打印horse.
  
  变量
  
  无法声明变量。当第一次使用时,不存在的变量会被创建为null值。
  
  全局变量在使用前,需要global声明。这是根据上面得出的自然结果,因此这是个完美的理由,但,如果没有显示的声明,全局变量甚至无法读取—PHP將悄悄的创建一个局部同名变量取代它。我还没见过其它语言使用类似的方法处理范围问题。
  
  没有引用。PHP所谓的引用是个真正的别名;这无疑是一种倒退,不像Perl的引用,也没有像Python那样的对象标识传递。
  
  没有明显的方式检测和取消引用。
  
  ”引用”使变量在语言中与众不同。PHP是动态类型的,因此变量通常无类型…除了引用,它修饰函数定义,变量语法,和赋值。一旦变量被引用(可在任何地方发生),它就一直是个引用。没有明显的方法探测和解引用需要的变量值。
  
  好吧,我说谎了。有些”SPLtypes”也作用于变量:$x=newSplBool(true);$x="foo";將失败。这有点像静态类型,自己看看。
  
  Areferencecanbetakentoakeythatdoesn’texistwithinanundefinedvariable(whichbecomesanarray)。Usinganon-existentarraynormallyissuesanotice,butthisdoesnot.
  
  通过函数定义的常量称为takingastring;这之前,它们不存在。(这可能实际上是复制Perl使用常量的行为。)
  
  变量名是大小写敏感的。函数和类名不是。使得方法使用驼峰式命名会很奇怪。
  
  结构
  
  array()和几个类似的结构不是函数。$func="array";$func();不工作。
  
  数组拆包可以使用list($a,$b)=…操作完成。list()是类函数语法,就像数组那样。我不知道为什么不给一个真正的专用语法,也不知道为什么名字如些的让人迷惑。
  
  (int)很显然的被设计成类似C,但它不是单独的标记;在语言中,没有东西被称为int.试试看:var_dump(int)不工作,它会抛出一个解析错误,因为参数看起来像是强制转操作符。
  
  (integer)是(int)的别名。也有(bool)/(boolean)和(float)/(double)/(real)。
  
  有个(array)操作符用来转成数组和(object)用来转成对象。这听起来很贴心,但常常有个用例:你可以用(array)使得某个函数参数,既可以是单个元素,也可以是列表,相同对待。但这样做不可靠,因为如果某人传递了单个对象,把它转换成数组將实际上生成了一个包含对象属性的数组。(转换成对象执行了反转操作。)
  
  include()这类的函数基本上就是C的#include:他们將其它的文件源码转存到你的文件中。没有模块系统,甚至对PHP代码也一样。
  
  没有类似嵌套或者局部范围的函数或类。它们都是全局的。include某文件,它的变量导入到当前函数范围中(给了文件访问你的变量的能力),但是函数和类存入全局范围中。
  
  追加数组使用$foo[]=$bar.
  
  echo不是函数。
  
  empty($var)是如此极端,对于任何其它东西不表现为函数,除了变量,e.g.empty($var||$var2),是个解析错误。为什么地球上有这种东西,解析器为什么需要了解empty?
  
  还有些冗余的语法块:if(…):…endif;,等等。
    黑客防线网安服务器维护方案本篇连接:http://www.rongsen.com.cn/show-17697-1.html
网站维护教程更新时间:2012-09-21 05:37:56  【打印此页】  【关闭
我要申请本站N点 | 黑客防线官网 |  
专业服务器维护及网站维护手工安全搭建环境,网站安全加固服务。黑客防线网安服务器维护基地招商进行中!QQ:29769479

footer  footer  footer  footer