Home >Backend Development >PHP Tutorial >PHP 有什么特殊之处?与 Java 的浅层比较
tags: 编程 Java PHP
PHP中的变量以$符号开头,如果是全局变量则是以$_开头并且都大写,如$_REQUEST。在Java中变量可以是字母(a-z)、下划线(-)或者美元符号($)开头,并且变量必须先有类型声明,如int i = 0,随后才能使用。但是PHP却不用,它的类型完全由赋值确定。你给它什么,它就是什么。那为什么要强制使用美元符开头呢?
记得在PHP中有这样的输出语句 echo "$name is me.",假如没有美元符,PHP又如何识别$name是一个变量呢?
在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"
知识共享许可协议