PHP和Java有什么区别?

2022-08-30 18:05:43

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

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


答案 1

这不是一个详尽的列表,我是PHP开发人员,不久前他参观了Java,所以Caveat Emptor。

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"); 

数组列表仍然具有数字键。还有另一个名为HashMap的集合,它将为您提供一个字典(或关联数组,如果你在90年代上学的话)类似对象。


ArrayList 和其他集合是使用称为泛型的东西(<String>)实现的。我不是Java程序员,所以我对泛型的理解是它们描述了对象将要操作的东西的类型。那里还有更多的事情要做。


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


所有方法参数在 Java 中都按值传递。但是,由于所有对象实际上都是引用,因此在传递对象时会传递引用的值。这意味着,如果您操作传递到方法中的对象,则操作将保持不变。但是,如果您尝试这样的事情,您将无法获得预期的结果。

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

现在是时候提到方法需要指定其返回类型,如果一个方法返回它不应该返回的东西,就会发生不好的事情。以下方法返回整型

public int fooBarBax(int v1){
}

如果一个方法要引发异常,你必须这样声明它,否则编译器将不会与它有任何关系。

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

如果您使用的方法中未写入的对象可能会引发异常,这可能会变得棘手。


Java中的主代码入口点将是类的方法,而不是PHP的主全局入口点


Java中的变量名称不以sigil($)开头,尽管我认为如果你希望它们这样做,它们可以


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 需要显式$this对象调用自己的方法方法时使用。Java(如上例所示)则不然。


Java程序倾向于从“程序运行,保持运行,处理请求”的方式构建,其中PHP应用程序是从“运行,处理请求,停止运行”的方式构建的。


答案 2

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

  • Java被编译为字节码,PHP被解释(正如Alan Storm指出的那样,因为PHP 4,它不是,但它仍然表现得好像它是);
  • Java是强大的静态类型,而PHP是相当弱和动态类型的;
  • PHP主要用于动态生成网页。Java也可以做到这一点,但也可以做其他任何事情(如小程序,手机软件,企业的东西,带和不带GUI的桌面应用程序,3D游戏,Google Web Toolkit...和
  • 在这里添加您最喜欢的差异

当需要时,您会注意到大多数差异,但最重要的是:

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

推荐