java 与 php 区别或异同(整理、整合)

收集了一下PHP和JAVA语言的相同或不同之处(来源在末尾有出处),已备后续使用做参考,在下一篇文章再详细写出,相同或者不同,可以让我们快速入门JAVA 或者PHP。
java和php基础部分相同或异同http://blog.csdn.net/fenglailea/article/details/52722710
风.fox

编程范式:

Java:纯面向对象的语言,有人说过:Java中一切皆对象!当然咯,人们都忘了Java的八种基本数据类型:int、double、boolean、byte、float、 long、short、char。但是念在每个Java每个基本数据类型都有包装类(int的包装类是Integer)的基础上,就姑且认为一切是对象吧。

PHP:即使用可面向对象的方式编程,又可使用面向过程的方式。这种两种编程范式结合的语言代表了计算机语言以后的一个发展趋势,在Scala、Golang、Python中都有体现。

语言类型:

Java:java是编译型强类型的语言(或者说是静态类型的语言),变量必须声明类型,例如:“int i = 0;”这样语言会比较严谨,不易出错,对开发周期比较长的超大型项目的长期开发和维护比较有好处。Java源文件是需要java编译器编译成class文件的,虽说从JVM的角度而言,严格来讲java也可以称之为“解释型”语言,因为毕竟是JVM解释了class文件,但是毕竟还是经过了java编译器的编译,况且直接编译成了二进制字节码文件,所以就不较真了,算它是编译型的把。

PHP:php是解释型弱类型的语言(或者说是动态类型或者非静态类型的语言),变量不必声明类型,例如:“$i = 0;”这样语言书写起来会比较舒服,能够让人更专注于业务逻辑,利于提高开发效率。PHP文件称之为“PHP脚本文件”,它没有被编译,而是直接由PHP解释器来解释的,所以它是非编译的解释型语言。

目前流行“半弱半强”的编译期自动类型判断的编译型静态语言。例如:Golang、Swift、Scala等。

控制语句表达式基本类型等基本语法:

Java和PHP的基本语法基本相同,其实大部分的语言的基本语法也都相同,但是他们还是有一些细微的区别:

1、foreach语句:

PHP中的foreach语句和大多数语言一样,就是中规中矩的foreach: foreach(arraysaselem){ $elem…} 。但是java却根本没有“foreach”这个关键字,取而代之的就是“for”,有人还给取了一个好听的名字“增强for循环”,其实就是foreach语句:for(String elem:arrays){elem…}。

2、goto语句:

Java中有此关键字,实际中,却不用。而是用continue或者break来代替此关键件字;但是PHP中出现不多,但是正常使用。
Java:

less:
    for(int i=0;i<10;i++)
    { 

      ........
      break less;
     }

PHP:

less:
    for($i=0;$i<10;$i++)
    { 

      ........
     goto less;
     } 

目前这个goto语句实在是用的太少,不论什么语言。。。

3、基本数据类型:

Java是int、double、boolean、byte、float、long、short、char;
JAVA变量必须声明类型(java是编译型强类型的语言)

php是与Java类似的标量类型是:int、float、boolean、string,但是,php还把数组array和object也归为了基本数据类型之中,不仅如此,resource和NULL也是。
PHP变量不必声明类型(PHP是解释型弱类型的语言),且$符号作为变量的前缀

语言的基本类型并非都是int、double等标量类型,还可能包含集合等其他复合的类型或者特殊类型。例如,Golang就把map数组作为了基本类型。

4、文件包含语句:

java中没有,php独有。此语句的作用是在其被调用的位置判断并包含一个文件。(这个文件的内容往往都是可以复用的组件)有:include()、include_once()、require()、require_once()四种。

include:其被调用的位置判断并包含一个文件的内容。使用方法:include(filename)

include_once:和include功能一样唯一的不同是如果包含了文件,则不再执行include_once(),否则,必须包含该文件。

require:很大程度上与include相同,但是有两点不同:1、无论什么条件,不论require包含的位置都会出现。例如:if(){require(…)}else{require(…)}无论是在if语句,还是else语句中,都会出现require的文件。2、require()出错时,脚本停止执行,而include将会继续执行。

require_once:确保被包含的文件只包含文件一次。

5、常量:

Java中没有,需要自己定义。例如:public static final String SUNDAY = “Sunday”;

php中常用的有两种常量,常用的有:define(“PI”,31.4)、和 const SUNDAY = “Sunday”;与java有对比意义的是第二种,与C语言类似的是第一种;还有一种常量是定义PHP系统级别的常量,定义完成中,可以在程序中直接使用。例如:要查看当前PHP的版本:echo PHP_OS。 “PHP_OS”就是系统级别的常量

6.异常处理

java和php中的异常处理 几乎相同

try{
//好好干,出了问题不要怕,外面有人接应
}catch(HttpException $e){
 //时刻准备着,处理上面抛出的
}catch(Exception $e){
//时刻准备着,处理他们都处理不了的问题
}finally(){
 //打扫战场,都收拾好了再走人
}

OOP特性:

目前PHP所使用的主流编程范式也是OOP,Java和PHP在此特性上极为相似,语法也极其相似,但是还是有略微不同:

调用方法或者属性的符号:

1、调用属性和方法:

java和大部分的语言一样,就是用点“.”。例如:object.name; object.getName();

php使用的是箭头“->”,例如:object−>name;object->getName();

2、调用静态类和类的常量:

java和大部分语言一样,就是用点“.”。例如:Object.createName(); object.NAME;

php使用的是“::”。例如:Object::createName(); object::NAME

3、文件命名空间和导入关键字:

java中是命名为“com.ryugou.space” 的package。
导入其他的类:import “com.gouryu.space.Object”; //包名小写,类名大写。

php是命名为“com\ryugou\space”的namespace,这俩关键字作用可认为相同。
导入其他的类:use”Com\GouRyu\Space\Object”;

JAVA包引用:import packageName.*;
PHP中没有这个功能

4、构造函数和析构函数:

java中是和类名字相同的函数,无返回值;java中无析构函数

php中是通过名称_ construct()来识别构造函数的;语法如下:function function([argument1,argument2, …])。php中还有类似于 C++的析构函数,用于当所用对象销毁时来调用。析构函数的名字必须是 destruct();语法为:function _destruct()。注意:无参数。

5、访问权限:

java:private、protected、default、public; public,private不必多说;default表示同一个包内可见,protected表示同一包内的类和所有子类可见,什么不都写表示“default”。

php:private、protected、public;private、public不必多说;protected表示的所有子类可见(php中无包的概念,所以。。。),注意:什么都不写表示“public”。

6、方法重载:

java支持通过方法重载实现多态。
php不支持,且可能永远都不支持。

7.类

类的声明:java的class可以定义为public,此时文件名要与公共类完全一致,PHP中没有这个功能
如果不包含公共类,则class与PHP声明一样

8.变量修饰符

静态变量修饰符 static(两者同)
静态初始化器 static{}(PHP没有)
最终常量 final(两者同) (建议用static代替)
易失变量 volatile(PHP没有)

9.方法修改饰

抽象方法 abstract(两者同)
静态方法 static (两者同)
最终方法 final(两者同)
本地方法 native(PHP没有)
多线程同步方法 synchronized(PHP没有)

10.方法定义

JAVA有返回值类型,
PHP必须有关键字function,PHP可以由返回值类型,也可以省略
JAVA中的main(String args[]),PHP中没有

11.参数传递

值调用,引用调用
两者几乎相同

注释

JAVA和PHP都支持 //或/**/

数据库访问比较

java通过jdbc来访问数据库,通过不同的数据库厂商提供的数据库驱动方便地访问数据库。访问数据库的接口比较统一。
PHP通过PDO来访问数据库,已经和JAVA类似,访问数据库的接口比较统一。

系统设计架构比较

两种语言都可以使用OOP系统设计

跨平台性

PHP和JAVA都支持跨平台

开发成本比较

php最经典的组合就是:php + mysql + nginx/apache。非常适合开发中小型的web应用(大型应用也可以开发),开发的速度比较快。而且所有的软件都是开源免费的,可以减少投入。
java的web应用服务器有免费tomcat、jboss等,如果需要更好的商业化的服务有:web sphere和web logic。

源代码安全

java开发的程序,最后用户拿到的是只是一些编译好的class类,无法看到完整的源代码,安全性高。
PHP开发的程序,代码是开源的,也有可以把软件源码加密的商业软件
两者几乎差不多。java编译的源码可以反编译出来

设计模式六大原则类的特性

PHP和JAVA几乎都一样

框架

各有千秋 不好比较

其他区别

  1:java是半编译语言,php是脚本语言。
  2:java使用封装继承,最小的单位是类,php作为脚本,最小单位就是语句,用两者输出hello world就知道了,所以java语法比较严格,而php很灵活
  。
  3:java是自动内存分配回收,php是一次创建一次销毁。
  4:java可以常驻内存,多线程;php无法常驻内存,也没有线程的概念。
5.PHP调用父类的构造函数不是使用super(),而是 parent

parent::__construct()。

PHP使用parent表示父类,这点同Java的super
6.PHP有析构函数,类似Java的finalize方法。例如:

public function __destruct () {
    echo "clear";
}

7.PHP使用this表示当对象,这点同Java的this
8.PHP使用self表示当前类,Java没有这个关键字,也不需要使用表示类
9.PHP在调用本类中的静态变量和方法时,必须使用self关键字和::,
java中直接使用 “.”

class A(){
    public static function foo () {
    echo “foo”;
    }
    self :: foo ();
} 

如果不在本类中则直接使用类名:

class A(){
    public static function foo () {
    echo “foo”;
    }
}
A :: foo ();

以上部分来源于
http://blog.csdn.net/i6448038/article/details/50352278
http://www.xuexila.com/baikezhishi/536806.html
http://www.myexception.cn/php/1955258.html
http://blog.163.com/lvshutao@126/blog/static/16463746720142212211595/

时间: 2024-08-04 04:56:30

java 与 php 区别或异同(整理、整合)的相关文章

C#命名空间与java包的区别分析

  C#命名空间与java包的区别分析         这篇文章主要介绍了C#命名空间与java包的区别,较为详细的分析了C#命名空间与java包的相同点与不同点,非常具有实用价值,需要的朋友可以参考下 本文实例分析了C#命名空间与java包的区别.分享给大家供大家参考.具体分析如下: 相同点: 1.都是为了重用性(reusebility)--软件工程中一个非常重要的目标. 2.C#里面的命名空间和java中的包都属于访问权限的控制机制. 不同点: 1.C#命名空间只是一种逻辑上的结构,它允许所

java.util.Date、java.sql.Date、java.sql.Time、java.sql.Timestamp区别和总结

java.util.Date.java.sql.Date.java.sql.Time.java.sql.Timestamp区别和总结   java.lang.Object  ....|__java.util.Date  ..........|__java.sql.Date/java.sql.Timestamp /java.sql.Time [父类]java.util.Date日期格式为:年月日时分秒  [子类]java.sql.Date日期格式为:年月日[只存储日期数据不存储时间数据]  [子类

关于c++堆栈与java堆的区别

问题描述 关于c++堆栈与java堆的区别 最近看java编程思想 看到这样一句话:"在Java中,所有对象都必须在内存"堆"里创建.而在C++中,对象是在堆栈中创建的.这样可达到更快的速度,"这句话不能理解.c++的堆栈和java的堆有啥区别啊. PS:原文"最重要的一种情况是C和C++对内存的管理方式,它是某些人觉得Java速度肯定慢的重要依据:在Java中,所有对象都必须在内存"堆"里创建.而在C++中,对象是在堆栈中创建的.这样

Android Dalvik虚拟机简述(与Java虚拟机的区别和简要的执行原理)

先一睹Dalvik虚拟机在Android系统框架图中位置: 文章目录: 一.虚拟机简述二.Java虚拟机简述三.Dalvik虚拟机简述四.Dalvik虚拟机与Java虚拟机的区别五.Dalvik虚拟机执行原理简述 此文章原始是PPT格式已转换为PDF,请直接下载文档阅读: AndroidDalvikVMOverview

java &amp;与&amp;&amp;的区别及实例_java

java &与&&的区别: & 既是位运算符又是逻辑运算符,&的两侧可以是int,也可以是boolean表达式,当&两侧是int时,要先把运算符两侧的数转化为二进制数再进行运算,而短路与(&&)的两侧要求必须是布尔表达式. 我想很多人在学习java的时候,或者面试时都会遇到 &和&& 然而,如果你没有真正的理解他们的意思,这会给你思路上面带来很大的麻烦 在这篇blog中,当你看完了以后,你会发现,很容易就把他们给区分开

Java 图片提取RGB数组 RGBOfCharMaps (整理)

1 package demo; 2 3 /** 4 * Java 图片提取RGB数组 RGBOfCharMaps (整理) 5 * 声明: 6 * 和ImageCombining配合使用的工具,这里是提取图片的R.G.B生成数组,放入文件 7 * 中,给ImageCombining进行图片合成. 8 * 9 * 2016-1-2 深圳 南山平山村 曾剑锋 10 */ 11 12 import java.awt.image.BufferedImage; 13 import java.io.Buff

java变量的区别浅析

 对于java的变量天天见到,但有时候别人问起它们的区别有时候也说不全,所以就找了些资料整理了整理... 类变量也叫静态变量,也就是在变量前加了static 的变量: 实例变量也叫对象变量,即没加static 的变量: 两者区别在于: 类变量(静态变量)是所有对象共有,其中一个对象将它值改变,其他对象得到的就是改变后的结果,并且类变量是可以直接通过类名来调用的 如:A.xingS: 而实例变量则属对象私有,某一个对象将其值改变,不影响其他对象,实例变量顾名思义是属于实例的,所以只能通过实例来调用

Java 图片转换为字符图 CharMaps (整理)

  /* * Java 图片转换成字符图 CharMaps (整理) * * 2016-1-2 深圳 南山平山村 曾剑锋 * * @(#)CharMaps.java 2014/1/16 * 1.这个一个Java程序,感谢您花费大量时间阅读本文档: * 2.本人知道大家并不喜欢看大量文字描述,但实属无奈,因为我们的沟通只能通过文字: * 3.当您在复制.粘贴的时候请注意包名为:practice,文件名为:CharMaps,以防止一些不必要的麻烦: * 4.下面这张由字符组成的图是直接由图片生成的,

企业Java应用服务器之JBoss7.1与Apahce整合

为什么使用Jboss? 1.Jboss支持热部署,将归档后的JAR.WAR文件到部署目录下自动加载部署,自动更新. 2.在高并发访问时,性能比Tomcat更加优秀.高效. 3.Jboss在设计方面与Tomcat相比,进行了线程池和连接池的优化. 4.Jboss已经成为Java中间件的一个企业级的Web应用,Tomcat是轻量级应用,作为Java开发调试环境使用广泛. 5.配置简单,占用系统资源少. Jboss AS 7.1两种运行模式? Dmain Mode(域模式):多台Jboss AS服务器