浅谈Java和PHP的异同
编程范式:
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($arrays as $elem){ $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;
php是与Java类似的标量类型是:int、float、boolean、string,但是,php还把数组array和object也归为了基本数据类型之中,不仅如此,resource和 NULL也是。
语言的基本类型并非都是int、double等标量类型,还可能包含集合等其他复合的类型或者特殊类型。例如,Golang就把map数组作为了基本类型。
文件包含语句:java中没有,php独有。此语句的作用是在其被调用的位置判断并包含一个文件。(这个文件的内容往往都是可以复用的组件)有:include()、
4、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:确保被包含的文件只包含文件一次。
常量:Java中没有,需要自己定义。例如:public static final String SUNDAY = "Sunday";
php中常用的有两种常量,常用的有:define("PI",31.4)、和 const SUNDAY = "Sunday";与java有对比意义的是第二种,与C语言类似的是第一种;还有一种常 量是定义PHP系统级别的常量,定义完成中,可以在程序中直接使用。例如:要查看当前PHP的版本:echo PHP_OS。 “PHP_OS”就是系统级别的常量
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";
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不支持,且可能永远都不支持。
浅谈Java和PHP的异同的更多相关文章
- 浅谈Java中接口与抽象类的异同
浅谈Java中接口与抽象类的异同 抽象类和接口这两个概念困扰了我许久,在我看来,接口与抽象类真的十分相似.期间也曾找过许许多多的资料,参考了各路大神的见解,也只能是简简单单地在语法上懂得两者的区别.硬 ...
- 浅谈Java的throw与throws
转载:http://blog.csdn.net/luoweifu/article/details/10721543 我进行了一些加工,不是本人原创但比原博主要更完善~ 浅谈Java异常 以前虽然知道一 ...
- 浅谈Java中的equals和==(转)
浅谈Java中的equals和== 在初学Java时,可能会经常碰到下面的代码: 1 String str1 = new String("hello"); 2 String str ...
- 浅谈Java中的对象和引用
浅谈Java中的对象和对象引用 在Java中,有一组名词经常一起出现,它们就是“对象和对象引用”,很多朋友在初学Java的时候可能经常会混淆这2个概念,觉得它们是一回事,事实上则不然.今天我们就来一起 ...
- 浅谈Java中的equals和==
浅谈Java中的equals和== 在初学Java时,可能会经常碰到下面的代码: String str1 = new String("hello"); String str2 = ...
- 浅谈JAVA集合框架
浅谈JAVA集合框架 Java提供了数种持有对象的方式,包括语言内置的Array,还有就是utilities中提供的容器类(container classes),又称群集类(collection cl ...
- 浅谈java性能分析
浅谈java性能分析,效能分析 在老师强烈的要求下做了效能分析,对上次写过的词频统计的程序进行分析以及改进. 对于效能分析:我个人很浅显的认为就是程序的运行效率,代码的执行效率等等. java做性能测 ...
- 浅谈Java中的深拷贝和浅拷贝(转载)
浅谈Java中的深拷贝和浅拷贝(转载) 原文链接: http://blog.csdn.net/tounaobun/article/details/8491392 假如说你想复制一个简单变量.很简单: ...
- !! 浅谈Java学习方法和后期面试技巧
浅谈Java学习方法和后期面试技巧 昨天查看3303回复33 部落用户大酋长 下面简单列举一下大家学习java的一个系统知识点的一些介绍 一.java基础部分:java基础的时候,有些知识点是非常重要 ...
随机推荐
- 很不幸,装win10和Ubuntu双系统还是入坑了
具体问题描述:在安装Ubuntu的时候,没有发现有与windows共存的提示,直接说本计算机没有安装系统.在安装完成后,发现通过BIOS只有进入Ubuntu的启动项,没有进入Windows的启动项. ...
- Asp.net core中由于页面编码导致的中文乱码
问题描述 最近使用asp.net core写了一个简单的网站,在windows系统下完全没有出现问题.后来在linux系统中搭建了docker,并且在linux中自动使用git获取源码,编译,部署一条 ...
- 1_Python历史及入门
前提:简述CPU 内存 硬盘 操作系统 应用程序CPU:计算机的运算核心和控制核心,好像人类的”大脑“内存:负责数据与CPU直接数据交流处理,将临时数据和应用程序加载到内存,然后在交由CPU处理. 造 ...
- python读取excel,返回dic列表
def get_xls_sheets_as_dic(pro_name, xls_name): dic_list = [] xls_path = os.path.join(BASE_PATH, &quo ...
- js实现reqire中的amd,cmd功能
js实现reqire中的amd,cmd功能 ,大概实现了 路径和模块 引入等重要功能. 本帖属于原创,转载请出名出处. <!DOCTYPE html PUBLIC "-//W3C//D ...
- css:伪类和伪元素
一:伪类 1. :active 想被激活的元素添加样式 2. :focus 向拥有键盘输入焦点的元素添加样式 3. :hover 当鼠标悬浮在元素上方时,向元素添加样式 4. ...
- 【EFM32】EFM32芯片解锁、加锁操作
[解锁] 使用J-Flash,新建Project,选择对应的EFM32芯片型号. 选择Target >> Connect >> Unsecure chip ,便进行解锁了,解锁 ...
- time_wait的快速回收和重用
TCP四次挥手: Time_wait产生原因及作用: 1. time_wait状态如何产生? 由上面的变迁图,首先调用close()发起主动关闭的一方,在发送最后一个ACK之后会进入time_wait ...
- Spring再接触 Scope范围
<bean id="userService" class="com.bjsxt.service.UserService" scope="prot ...
- 有关Linux ipv6模块加载失败的问题
有关Linux ipv6模块加载失败的问题 同事一个SUSE11sp3环境配置ipv6地址失败,提示不支持IPv6,请求帮助,第一反应是应该ipv6相关内核模块没有加载. 主要检查内容: ...