首页  >  文章  >  后端开发  >  PHP 有什么特殊之处?与 Java 的浅层比较

PHP 有什么特殊之处?与 Java 的浅层比较

WBOY
WBOY原创
2016-06-23 13:12:13883浏览

tags: 编程 Java PHP

PHP中的变量以$符号开头,如果是全局变量则是以$_开头并且都大写,如$_REQUEST。在Java中变量可以是字母(a-z)、下划线(-)或者美元符号($)开头,并且变量必须先有类型声明,如int i = 0,随后才能使用。但是PHP却不用,它的类型完全由赋值确定。你给它什么,它就是什么。那为什么要强制使用美元符开头呢?

记得在PHP中有这样的输出语句 echo "$name is me.",假如没有美元符,PHP又如何识别$name是一个变量呢?

讲到输出语句,就不得单双引号在PHP中区别。

在Java中,我们使用输出语句通常是System.out.println();括号里可以是任意基本类型+String。而在PHP中输出语句更丰富,有echo,print,print_r还有var_dump。以echo为例,假定$name = 'Lshare';。对于echo '$name is me.',PHP将不会对单引号里面的字符串进行解析,而是直接输出$name is me.;对于echo "$name is me.",PHP对双引号里的字符串进行解析,输出Lshare is me.。双引号的代价是效率上比单引号差,但可读性好。为了提高性能,你可能这样使用 echo $name.' is me.'或echo $name,' is me.',明显可读性会差点,但是性能上比用双引号好,因为不用去解析引号内的字符串了。

有趣的是echo和print他们并不是函数,而是语言结构,就好像if、else那样。你既可以使用()来输出单个参数,也可以使用''或""输出多个参数,中间用,隔开,如上文中的echo $name,' is me.'。这就是它的语法,就好像你学习if...else...一样,懂了这些才可以随心所欲而不逾矩。

初学者可能会对这样的语句感到疑惑echo '
',认为浏览器应该直接输出
,因为单引号内,PHP是不会进行解析的。哈,PHP是不解析,但是浏览器解析啊。回想一下,浏览器不就是接收Html类型的数据,然后解析呈现给用户吗?PHP把
给了浏览器,然后浏览器解析成换行,难道有什么不对吗?

再谈谈数组。

在Java中我们通过int[] arr = new int[]{1,2,3};来创建一个数组,而在PHP中确实用array()函数来创建的。而且PHP中的数组还有键值对的概念,这不是跟Java中的Map很像吗?你可以不指定键,它会默认从0开始作为索引键;你也可以使用=>来指定键。如下:

$arr = array(     "1"=>"Google",    "3"=>"Microsoft",    "2"=>"Apple");

说到数组就不得不谈谈遍历

遍历可以使用for循环,也可以使用foreach循环。for循环跟Java中的差不多,不谈,还是谈谈foreach循环有趣。在Java中的foreach循环是这样的:

int[] arr = new int[]{1,2,3};for(int item:arr){//":"前面是数组中元素的类型和临时变量,后面的是数组    System.out.println(item);}

而在PHP中是这样的:

$arr = array(    1,2,3);//第一种foreach($arr as $value){//as前面是数组,后面是数组中元素的临时变量。    echo "$value<br/>";}//第二种foreach($arr as $key=>$value){//同上,不过同时保存了键值。    echo "$key = $value<br/>";}

简洁了好多有木有?网络时代讲究的简洁高效,不浪费带宽,PHP就是这样。

谈谈字符串和数组的转化

在Java中将字符串切割成数组,最简单的是这样:

String str = "1-2-3";String[] arr = str.splite("-");

而在PHP中提供了explode函数:

$str = "1-2-3"; $arr = explode("-",$str);

在Java中将数组转成字符串

String str2 = Arrays.toString(arr);//是"[1, 2, 3]"//或者要自定输出格式的话StringBuilder sb = new StringBuilder();for(int i=0;i<arr.length;i++){    sb.append(arr[i]);    if(i!=arr.length-1){        sb.append("-");    }}String str3 = sb.toString();//是"1-2-3"

而在PHP中没那么麻烦,直接用implode函数就够了。

$str2 = '['.implode(",",$arr).']'; //是"[1, 2, 3]"$str3 = implode("-",$arr); //是"1-2-3"

一切变得如此简洁,世界一下子就好了。

说到数组,还真的避不了数组排序

在Java中提供了Arrays.sort()的许多重载方法,用于数组的排序。

int[] ranks = new int[]{2,9,1,5,7};//使用默认的比较器,进行升序排序Arrays.sort(ranks); //为 "[1, 2, 5, 7, 9]"//自定义比较器,进行降序排序Integer[] ranks = new Integer[]{2,9,1,5,7};Arrays.sort(ranks, new Comparator<Integer>() {    @Override    public int compare(Integer o1, Integer o2) {        return o2-o1;    }});// 为 "[9, 7, 5, 2, 1]"

在PHP中没那么麻烦,当然定制性没那么好。

$ranks = array(    2,9,1,5,7);sort($ranks); //按值升序排序rsort($ranks); //r表示reverse,相反的意思。按值降序排序asort($ranks); //a表示association,键值联系的意思。保持键值关系升序排序arsort(); //保持键值关系降序排序ksort($ranks); //k表示key,按键升序排序krsort(); //按键降序排序

再说一点表单的

当使用表单提交多选的值时,要注意name属性的值后面要带"[]",不然PHP中接收的是单个值而不是一个数组。如:

client.html

<form action="server.php" method= "POST">    <input type="checkbox" name="city[]" value="gz" />广州    <input type="checkbox" name="city[]" value="bj"/>北京    <input type="checkbox" name="city[]" value="sz"/>深圳    <input name="submit" type = "submit" value="提交"/></form>

server.php

<?phpif(isset($_POST['city'])){ //判断变量是否有值    $citys = $_POST['city'];    echo '['.implode(',',$citys).']'; }?>

本文标题: PHP 有什么特殊之处?与 Java 的浅层比较文章作者: IT协会知识库许可协议: ©署名-非商用-相同方式共享 4.0"

知识共享许可协议

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn