What are the main differences between PHP and Java that someone proficient in PHP but learning Java should know about?
Edit: I mean differences in the syntax of the languages, i.e their data types, how they handle arrays & reference variables, and so forth :)
In a nutshell: While comparing the Java vs PHP performance, Java is clearly a winner as it is faster and efficient than PHP to write enterprise applications. Like developers have to build mobile enterprise applications to streamline complex business processes and operations.
Both PHP and Java are among the easiest languages to learn. The debate over what is easier is still open though: it depends on your previous knowledge and skills. While some feel like Java's library is too deep, others point out that the syntax of Java is simpler than PHP and is closer to the English language.
Both Java and PHP are object-oriented languages. Using OOP reduces time and cost of software development, maintenance, and support. Java is also a computing platform based on Java Virtual Machine and Java API. A virtual machine helps your application work faster and runs on different operating systems.
There are two possible ways to bridge PHP and Java: you can either integrate PHP into a Java Servlet environment, which is the more stable and efficient solution, or integrate Java support into PHP. The former is provided by a SAPI module that interfaces with the Servlet server, the latter by this Java extension.
Not an exhaustive list, and I'm PHP developer who did a tour of Java a while back so Caveat Emptor.
Every variable in Java needs to be prepended with a data type. This includes primitive types such as boolean, int, double and char, as well as Object data-types, such as ArrayList, String, and your own objects
int foo = 36; char bar = 'b'; double baz = 3.14; String speech = "We hold these truths ..."; MyWidget widget = new MyWidget(foo,bar,baz,speech);
Every variable can only hold a value of its type. Using the above declarations, the following is not valid
foo = baz
Equality on objects (not on primitive types) checks for object identity. So the following un-intuitively prints false. Strings have an equality method to handle this.
//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"); }
Arrays are your classic C arrays. Can only hold variables of one particular type, need to be created with a fixed length
To get around this, there's a series of collection Objects, one of which is named ArrayList that will act more like PHP arrays (although the holds one type business is still true). You don't get the array like syntax, all manipulation is done through methods
//creates an array list of strings ArrayList<String> myArr = new ArrayList<String>(); myArr.add("My First Item");
ArrayLists still have numeric keys. There's another collection called HashMap that will give you a dictionary (or associative array, if you went to school in the 90s) like object.
ArrayLists and other collections are implemented with something called generics (the <String>). I am not a Java programmer, so all I understand about Generics is they describe the type of thing an Object will operate on. There is much more going on there.
Java has no pointers. However, all Objects are actually references, similar to PHP 5, dissimilar to PHP 4. I don't think Java has the (depreciated) PHP &reference &syntax.
All method parameters are passed by value in Java. However, since all Objects are actually references, you're passing the value of the reference when you pass an object. This means if you manipulate an object passed into a method, the manipulations will stick. However, if you try something like this, you won't get the result you expect
public void swapThatWontWork(String v1, String v2) { String temp = var1; var1 = var2; var2 = temp; }
It's as good a time as any to mention that methods need to have their return type specified, and bad things will happen if an method returns something it's not supposed to. The following method returns an int
public int fooBarBax(int v1){ }
If a method is going to throw an exception, you have to declare it as such, or the compiler won't have anything to do with it.
public int fooBarBax(int v1) throws SomeException,AnotherException{ ... }
This can get tricky if you're using objects you haven't written in your method that might throw an exception.
You main code entry point in Java will be a method to a class, as opposed to PHPs main global entry point
Variable names in Java do not start with a sigil ($), although I think they can if you want them to
Class names in Java are case sensitive.
Strings are not mutable in Java, so concatenation can be an expensive operation.
The Java Class library provides a mechanism to implement threads. PHP has no such mechanism.
PHP methods (and functions) allow you have optional parameters. In java, you need to define a separate method for each possible list of parameters
public function inPHP($var1, $var2='foo'){} public void function inJava($var1){ $var2 = "foo"; inJava($var1,$var2); } public void function inJava($var1,$var2){ }
PHP requires an explicit $this be used when an object calls its own methods methods. Java (as seen in the above example) does not.
Java programs tend to be built from a "program runs, stays running, processes requests" kind of way, where as PHP applications are built from a "run, handle the request, stop running" kind of way.
I think these two languages (as well as their runtime systems) are too different to list all differences. Some really big ones that come to my head:
You will notice most differences when it’s time to, but what’s most important:
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With