Interface
interface Arrayable {
public function toArray() : array;
}
Using a Trait:
trait JsonSerializableTrait {
public function jsonSerialize()
{
// or array_filter(get_object_vars($this)); if you don't want to include null values
return get_object_vars($this);
}
}
Example:
class ClassToArray implements \JsonSerializable, Arrayable
{
use JsonSerializableTrait;
private $propOne = "one";
private $propTwo = "two";
}
$toArrayTest = new ClassToArray();
assert($toArrayTest->jsonSerialize() == [ 'propOne' => 'one', 'propTwo' => 'two' ]);