Is er een manier om een class property af te dwingen?
Stel we hebben een abstracte class Bar. Hierin zou ik graag een abstracte class property in willen opnemen die door de child classes moet worden ingevuld. Dit lijkt echter niet te kunnen:
Oké, dan zou het inderdaad zoiets moeten worden. Ik had het handiger gevonden als je gewoon een property kon afdwingen, maar dan moet ik het inderdaad in zo'n soort oplossing gaan zoeken. Thanks!
Zo ben je er aardig zeker van dat getName() alleen maar correcte data terug geeft:
<?php
abstract class Miauw
{
protected $name;
final public function getName() // Final!
{
if ( ! is_string($this->name))
{
throw new DomainException(sprintf('%s::$name is of type %s, string expected', static::class, gettype($this->name)));
}
return $this->name;
}
}
class Goed extends Miauw
{
public function __construct()
{
$this->name = 'Yay!';
}
}
class Fout extends Miauw
{
public function __construct()
{
$this->name = 42;
}
>> get_declared_class() is beschikbaar vanaf PHP 5.3, de zelfde versie die namespaces introduceerde, dus je zit goed.
Je bedoelt get_called_class?
Wat is trouwens beter, om een method te gebruiken, dus get_called_class()? Of zoals jij doet met static::class? En gaat het dan toevallig mis als je een class property met de naam $class hebt?
Nee, __CLASS__ gelde alleen voor de huidige class. ::class kan gebruikt worden in elke omstandigheid:
<?php
namespace Foo {
class Baz{
}
class Foo extends Bas
{
public function fiz()
{
echo $this::class; // Foo\Foo
echo static::class; // Foo\Bas
}
}