Não vejo diferença entre o código
PHP OO e o código Java. Talvez
a questão seja que PHP estruturado é mais fácil que OO, mas isto seria uma mera comparação entre paradigmas e não entre linguagens. E você o que pensa?
Não vejo que uma seja mais difícil que a outra, pois tudo vai depender do objetivo e pra qual finalidade a linguagem está sendo usada. Se eu usar o Java pra construir um sistema basicamente formado por CRUDs, ela se tornará muito mais fácil que PHP sendo usando pra criar um sistema de geoprocessamento ou qualquer outra coisa mais complexa que CRUD. Essa é minha opinião.
PHP me parece mais fácil de fazer um “código rápido” sem muita preocupação. Mas realmente se você for aprender OO direito, todos os conceitos e tal, aí Java me parece tão fácil/difícil quanto.
Acho que a dificuldade mesmo é em aprender Orientação a Objetos. A sintaxe do Java não costuma ser a dificuldade.
Ao mesmo tempo, como o PHP hoje é multiparadigma e tem umas 10 formas diferentes de fazer a mesma coisa, de repente pode até ser mais confuso pro iniciante que está querendo aprender com boas práticas e tudo.
Estava aqui praticando OO em PHP e vejam o que saiu, parece com códigos Java que vejo por ai.
<?php
namespace App\Account;
use App\Account\Exception\InsufficientBalanceException;
use App\Account\Exception\ValueTransferInvalidException;
class AccountRegister implements Transfer
{
/**
* @var string
*/
private $registerDate;
/**
* @var App\Account\Account
*/
private $accountCredited;
/**
* @var App\Account\Account
*/
private $accountDebited;
/**
* @param Account $accountCredited, Account, $accountDebited
* @return bool
*/
public function __construct(Account $accountCredited, Account $accountDebited)
{
$this->accountCredited = $accountCredited;
$this->accountDebited = $accountDebited;
}
/**
* @param double $balance
* @return bool
* @throws Exception\ValueTransferInvalidException
* @throws Exception\InsufficientBalanceException
*/
public function transfer($value)
{
if($value <= 0)
throw new ValueTransferInvalidException();
if($this->accountDebited->getBalance() < $value)
throw new InsufficientBalanceException();
$this->accountDebited->debit($value);
$this->accountCredited->deposit($value);
return true;
}
}
PHP é bem mais fácil se não for usado OOP.