Java and PHP (even when using OO PHP) have a vast array of differences.
-
Java is strongly-typed, PHP is not, although there is a limited scope for type-hinting in PHP. This makes a huge difference to method signatures. In PHP, you can only force method parameters to be of a certain class or interface or an array:
public function myMethod(SomeClass $foo, array $bar){}
...but you cannot type-hint for primitives! So public function myMethod(int $foo, boolean $bar){}
is invalid and will throw a parse error.
Furthermore, any parameter that has been type-hinted cannot be passed as null
unless null
is given as a default value. So to allow null
s, you need to use:
public function myMethod(SomeClass $foo = null)
PHP does not require (or even support) specifying the return type of a function.
PHP classes do not have final
fields, although what would be a static final
field in Java is a const
in PHP. EDIT: A const
in PHP is more limited than a static final
in Java as the latter can be an array or object instance, whereas the former must be a constant value (number or a string, essentially).
-
"Overloading" in PHP does not mean the same as it does in Java. In Java, it means specifying multiple methods of the same name, but with a different set of parameters:
public void myMethod(int foo){}; public void myMethod(float foo){};
In PHP, it refers to the dynamic creation of properties and methods using the __get()
, __set()
and __callStatic()
"magic" methods. See the PHP manual for a description on their use. Java-style method overloading is impossible in PHP and an attempt to redeclare a method (with or without a different set of parameters) will fail.
May be obvious to some, but in PHP you use ::
to access static methods and properties and ->
to access instance ones, but in Java .
is used for both.
PHP doesn't have packages, but it does have namespaces.
As of PHP5, constructors in PHP are not supposed to be methods with a name that matches the class, like in Java, but the magic method __construct()
should be declared instead, although the PHP4 style is supported for backward-compatibility. Also, PHP has a destructor method named __destruct()
.
In Java, all classes inherit from Object
, but there is no such generic super-class in PHP.
Even when maximizing the amount of OOP in a PHP script, it still relies on a procedural flow; there's no class-level entry point like in Java (i.e., public static void main(String[] args)
or public void init()
for applets).