什么是PHP和Java之间的区别?

问题描述 投票:23回答:4

什么是PHP和Java之间的主要区别,有人精通PHP,但学习Java应该知道的?

编辑:我的意思是在语言,即它们的数据类型,它们是如何处理数组和引用变量,等等:)的语法差异

java php
4个回答
46
投票

没有一个详尽的清单,我PHP开发谁做的Java之旅而回,所以买者自负。

需要在Java中的每个变量与数据类型前缀。这包括基本类型,如布尔,整型,双和炭,以及对象数据类型,例如ArrayList,String和自己的对象

int  foo    = 36;
char bar    = 'b';
double baz  = 3.14;
String speech = "We hold these truths ...";
MyWidget widget = new MyWidget(foo,bar,baz,speech);

每个变量只能容纳它的类型的值。使用上述声明,以下是无效

foo = baz

平等上的对象(未在原始类型),用于对象的身份检查。所以下面的非直观的打印错误。字符串有一个平等的方法来处理这个问题。

//see comments for more information on what happens 
//if you use this syntax to declare your strings
//String v1 = "foo";
//String v2 = "foo";

String v1 = new String("foo");
String v2 = new String("foo");

if(v1 == v2){
    println("True");
}
else{
    println("False");
}

数组是你的经典C数组。只能容纳一个特定类型的变量,需要用一个固定长度创建


为了解决这个问题,有一个系列集合对象,其中一个被命名的ArrayList,将采取更喜欢PHP的数组(虽然持有一种类型的业务仍然是真实的)的。你不会得到像语法的阵列,所有的操作都通过方法来完成

//creates an array list of strings
ArrayList<String> myArr = new ArrayList<String>();
myArr.add("My First Item"); 

的ArrayList还有数字键。还有所谓的HashMap的另一个集合,会给你一个字典(或关联数组,如果你去学校在90年代)状的物体。


的ArrayLists和其他集合与一种叫做泛型(在<字符串>)来实现。我不是一个Java程序员,因此,所有我了解泛型是它们所描述的对象将要操作的东西类型。还有更多对那里发生的。


Java没有指针。然而,所有的对象实际上是引用,类似PHP 5,不相似的PHP 4。我不认为Java有(贬值),PHP和参考和语法。


所有方法参数的Java中的值传递。然而,由于所有的对象实际上是引用,你当你传递一个对象通过参考的价值。这意味着如果你操作方法传入了一个对象,该操作将继续坚持。但是,如果你尝试这样的事情,你不会得到你所期望的结果

public void swapThatWontWork(String v1, String v2)
{
  String temp = var1;
  var1 = var2;
  var2 = temp;
}

这是良好的时间内任何一提的是方法,需要指定其返回类型有,如果一个方法返回的东西它不应该不好的事情会发生。以下方法返回int

public int fooBarBax(int v1){
}

如果一个方法会抛出异常,你必须把它作为申报等,或编译器不会有什么关系呢。

public int fooBarBax(int v1) throws SomeException,AnotherException{
   ...
}

这可以,如果你使用你没有在你的方法写的对象可能会抛出异常变得棘手。


在Java中,你的主要代码切入点将是一个类的方法,而不是PHP的全球主要入口点


在Java中变量名不使用印记($)开始,但我认为他们可以的,如果你希望他们


在Java类的名称是区分大小写的。


字符串是不是在Java中可变的,所以级联可以是一个昂贵的操作。


Java类库提供了一种机制来实现线程。 PHP没有这样的机制。


PHP的方法(和功能),让您有可选参数。在Java中,你需要定义的参数,每个可能的列表中选择一个单独的方法

public function inPHP($var1, $var2='foo'){}

public void function inJava($var1){
    $var2 = "foo";
    inJava($var1,$var2);
}
public void function inJava($var1,$var2){

}

PHP需要一个明确的$当一个对象调用它自己的方法这个方法可以使用。的Java(如图上面的例子)没有。


Java程序往往是从内置“程序运行,保持运行,处理请求”的一种方式,那里的PHP应用程序从一个内置“运行,处理请求,停止运行”的一种方式。


14
投票

我认为这两种语言(以及它们的运行时系统)差异太大,列出所有的差异。浮现在我的脑海一些真正大的:

  • Java的编译成字节码,PHP解释(如艾伦风暴指出,由于PHP 4,它不是,但它仍然表现为如果它是);
  • Java是强静态类型,而PHP是相当弱和动态类型;
  • PHP主要是用来动态生成网页。 Java可以做到这一点,但可以做任何事情,以及(如小程序,手机软件,企业的东西,桌面应用程序,并没有图形用户界面,3D游戏,谷歌网页工具包...);和
  • 在这里添加您喜爱的区别

你会发现大多数的差异时,它的时间,但什么是最重要的:

  • PHP提供了OOP(面向对象编程)作为在大多数项目中被忽略的一个选项。 Java要求你到OOP方式进行编程,但在一个不那么OOP语言背景学习Java的时候,它真的很容易把事情搞得一团糟并使用OOP错误的方式(或者你可以把它称为次优的方法或低效的方式......)。

6
投票
  • Java是强类型。 PHP是不是;
  • PHP做了很多的隐式类型转换的,这实际上是有问题的,这就是为什么PHP5有一个像===!==运营商。 Java的隐式类型转换主要限于基本类型的自动装箱(PHP没有原始类型)。这经常出现。

考虑:

$val = 'a';
if (strpos('abcdefghij', $val)) {
  // do stuff
}

这是不正确的,将具有不执行块因为0的返回索引被转换成false。正确的版本是:

$val = 'a';
if (strpos('abcdefghij', $val) !== false) {
  // do stuff
}

Java条件语句需要一个明确的boolean;

  • PHP变量和数组都是由$否则难以区分前置;
  • PHP关联阵列的当量为PHP Maps(例如HashMap)。关联数组进行排序上插入顺序,并且可以像普通阵列中使用(在值)。那里有一个维护插入顺序在Java中,但这是例外而非常态Map实施;
  • $arr['foo'] = 'bar'插入或关联数组更新的元素。 Java的必须使用Map.put()Map.get();
  • PHP5具有函数指针和匿名函数(使用create_function())的等同物; 5.3在语言级别引入了封闭。 Java的必须使用内部类两种,这是有点冗长。此外,内部类在他们如何能够从外范围(上JavaPapers阅读Java Closures)访问变量的限制,使他们不能那样强大真正关闭。
  • 变量声明是在PHP可选;
  • 函数中的全局变量的使用需要明确使用PHP中global关键字;
  • POST / GET参数,除非另有配置(register_globals())自动导致在相同的名称的全局变量。它们或者可通过$_POST全局变量(和$_SESSION会话变量),而支持这些东西访问来自一个JEE附加称为通过类似HttpServletRequestHttpSession对象的servlet API;
  • 在PHP函数声明使用function关键字,而在Java中声明的返回类型和参数类型;
  • PHP函数名称不能正常交锋,而Java允许只要在不同的方法签名不是模棱两可的方法重载;
  • PHP有默认值函数的参数。 Java没有。在Java中,这是使用方法重载实现。
  • PHP支持missing-method图案,这是令人混淆称为“overloading”在PHP文档。

相比:

function do_stuff($name = 'Foo') {
  // ...
}

void doStuff() {
  doStuff("Foo");
}

void doStuff(String what) {
  // ...
}
  • 在PHP字符串常量使用宣布单或双引号,像Perl的。双引号将评估在文本中嵌入的变量。所有的Java字符串常量用双引号,并没有这样的变量赋值;
  • PHP对象方法调用使用->操作。 Java使用.操作;
  • 在Java中构造函数的类名来命名的。在PHP中,他们被称为__construct();
  • 在Java对象,this是隐含的,只是以前是明确的了解范围以及在某些情况下与内部类。在PHP5,$this是明确的;
  • 在Java中静态方法可与上一个实例.运算符来调用(虽然这是不鼓励它在语法上是有效的),但一般的类名来代替。

这两者是等价的:

float f = 9.35f;
String s1 = String.valueOf(f);
String s2 = "My name is Earl".valueOf(f);

但前者是首选。 PHP使用了静态的::范围解析操作;

  • 方法覆盖和重载是Java,但有点PHP中的杂牌组装电脑的十分自然;
  • PHP代码被嵌入在什么是另有很大程度上是一个HTML文档,就像JSP中如何工作;
  • PHP使用.运营商追加字符串。 Java使用+;
  • 在Java 5+方法必须使用省略号(...)明确声明可变长度参数列表。所有PHP函数是可变长度;
  • 可变长度参数列表被视为方法主体内部阵列。在PHP中,你必须使用func_get_args()func_get_arg()和/或func_num_args();
  • 毫无疑问更但那是所有的脑海中现在。

1
投票
  • 你可以使用JavaDoc工具在您的软件自动生成的文档。但是,你需要写在特定的方式的意见。
  • 你不能在手机上运行PHP :)有很多的运行时环境和平台。这意味着你需要考虑提前哪些库有可能会丢失或限制有可能是(屏幕大小,内存限制,文件路径分隔符“/”或“\” e.g)。
© www.soinside.com 2019 - 2024. All rights reserved.