什么是PHP和Java之间的主要区别,有人精通PHP,但学习Java应该知道的?
编辑:我的意思是在语言,即它们的数据类型,它们是如何处理数组和引用变量,等等:)的语法差异
没有一个详尽的清单,我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应用程序从一个内置“运行,处理请求,停止运行”的一种方式。
我认为这两种语言(以及它们的运行时系统)差异太大,列出所有的差异。浮现在我的脑海一些真正大的:
你会发现大多数的差异时,它的时间,但什么是最重要的:
===
和!==
运营商。 Java的隐式类型转换主要限于基本类型的自动装箱(PHP没有原始类型)。这经常出现。考虑:
$val = 'a';
if (strpos('abcdefghij', $val)) {
// do stuff
}
这是不正确的,将具有不执行块因为0
的返回索引被转换成false
。正确的版本是:
$val = 'a';
if (strpos('abcdefghij', $val) !== false) {
// do stuff
}
Java条件语句需要一个明确的boolean
;
$
否则难以区分前置;Maps
(例如HashMap
)。关联数组进行排序上插入顺序,并且可以像普通阵列中使用(在值)。那里有一个维护插入顺序在Java中,但这是例外而非常态Map
实施;$arr['foo'] = 'bar'
插入或关联数组更新的元素。 Java的必须使用Map.put()
和Map.get()
;create_function()
)的等同物; 5.3在语言级别引入了封闭。 Java的必须使用内部类两种,这是有点冗长。此外,内部类在他们如何能够从外范围(上JavaPapers阅读Java Closures)访问变量的限制,使他们不能那样强大真正关闭。global
关键字;register_globals()
)自动导致在相同的名称的全局变量。它们或者可通过$_POST
全局变量(和$_SESSION
会话变量),而支持这些东西访问来自一个JEE附加称为通过类似HttpServletRequest
和HttpSession
对象的servlet API;function
关键字,而在Java中声明的返回类型和参数类型;相比:
function do_stuff($name = 'Foo') {
// ...
}
至
void doStuff() {
doStuff("Foo");
}
void doStuff(String what) {
// ...
}
->
操作。 Java使用.
操作;__construct()
;this
是隐含的,只是以前是明确的了解范围以及在某些情况下与内部类。在PHP5,$this
是明确的;.
运算符来调用(虽然这是不鼓励它在语法上是有效的),但一般的类名来代替。这两者是等价的:
float f = 9.35f;
String s1 = String.valueOf(f);
String s2 = "My name is Earl".valueOf(f);
但前者是首选。 PHP使用了静态的::
范围解析操作;
.
运营商追加字符串。 Java使用+
;...
)明确声明可变长度参数列表。所有PHP函数是可变长度;func_get_args()
,func_get_arg()
和/或func_num_args()
;