@jablan
Kôd:
namespace Dpt;
abstract class Database
{
protected $link;
abstract public function query(string $query);
}
class Mysql extends Database
{
public function query(string $query)
{
return mysql_query($query, $this->link);
}
}
class Pdo extends Database
{
public function query(string $query)
{
return $this->link->query($query);
}
}
Kako misliš...
a.) zabraniti instanciranje?
b.) forsirati implementiranje metoda?
Kôd:
namespace Dpt;
class Database
{
public function __construct()
{
trigger_error('Not allowed', E_USER_ERROR);
}
}
class Mysql extends Database
{
public function __construct()
{
}
function query()
{
var_dump(func_get_args());
}
}
(new \Dpt\Mysql)->query('Hello');
Apstraktna klasa je klasa + interface, koja se uz to ne može instancirati, ima svoju svrhu, ali mislim da se mnogo puta koristi u pogrešne svrhe.
Tvoj mi primjer nije jasan, jesi li mislio na ovo:
Kôd:
function QuackAndFly(Duck $obj){$obj->quack(); $obj->fly();}
Možeš ti u recimo PHP da uradiš sve, ali ne mora da znači da trebaš, nije ni Java sjajan primjer.