<?php
class Model
{
protected $comments;
public function __construct()
{
$this->comments = new class {
public function count()
{
$responses = [
1,
2,
3,
"Error: could not connect to database",
5
];
$rand = rand(0, 4);
if (is_string($responses[$rand])) {
throw new Exception($responses[$rand]);
}
return $responses[$rand];
}
};
}
}
class Logger
{
public static function log(string $log): void
{
echo $log;
}
}
class CommentCount
{
private $count;
public function __construct(int $count)
{
$this->count = $count;
}
public function getCount(): int
{
return $this->count;
}
}
class CommentWow
{
public function wow(CommentCount $commentCount): string
{
if ($commentCount->getCount() == 0) {
return "Sad. :(";
}
if ($commentCount->getCount() > 0 && $commentCount->getCount() < 5) {
return "Ok.";
}
if ($commentCount->getCount() >= 5) {
return "Wow! :)";
}
}
}
class Post extends Model
{
public function commentCount(): CommentCount
{
try {
return new CommentCount($this->comments->count());
}
catch (Exception $e) {
Logger::log($e->getMessage());
return new CommentCount(0);
}
}
}
$post = new Post();
$commentCount = $post->commentCount();
$wow = new CommentWow();
var_dump($wow->wow($commentCount));
var_dump($wow->wow($commentCount));
var_dump($wow->wow($commentCount));
var_dump($wow->wow($commentCount));
var_dump($wow->wow($commentCount));