Вот вопросы:
1) Нет ли грамматических или логических ошибок.
2) Чем это удобней функций? Прикольно конечно наполнять объект, не задумываясь о том, как там оно внутри. Но я так подозреваю, не в этом фишка ООП. Либо у меня слишком детский класс.
3) Метод generateContent() генерирует html код. Говорят что это лучше не делать в классах, но я не понимаю, как тогда проще генерировать. Не в самом же скрипте его собирать.
4) Можно ли использовать переменные внутри методов, без $this. Как в том же моём generateContent().
class Film
{
private $name;
private $director;
private $actors = array();
private $actors_count;
public function __construct($name)
{
$this->name = $name;
}
public function setDirector($name)
{
$this->director = $name;
}
public function editName($name)
{
if(!empty($name))
{
$this->name = $name;
}
}
public function addActor($name)
{
$this->actors[] = $name;
$this->actors = array_unique($this->actors);
$this->countActor();
}
public function delActor($name)
{
if(($key = array_search($name, $this->actors)) !== false)
{
unset($this->actors[$key]);
$this->countActor();
}
}
private function countActor()
{
$this->actors_count = count($this->actors);
}
private function generateFilename($len = 10)
{
$charset = "abcdefghijklmnopqrstuvwxyz";
$name = '';
$count = strlen($charset);
while($len--)
{
$name .= $charset[mt_rand(0, $count-1)];
}
return $name.'.txt';
}
private function generateContent()
{
$html = '<p>Название фильма: '.$this->name.'</p>';
$html .= '<p>Режиссер: '.$this->director.'</p>';
if($this->actors_count > 0)
{
$html .= '<p>Актерский состав: '.implode(", ", $this->actors).'</p>';
}
return $html;
}
public function saveToFile($filename = '')
{
if(empty($filename))
{
$filename = $this->generateFilename();
}
if(file_put_contents($filename, $this->generateContent()))
{
return 'Файл сохранен';
}
else
{
return 'Ошибка сохранения файла';
}
}
}
$f = new Film('Терминатор 2');
$f->setDirector('Джеймс Кэмерон');
$f->addActor('Арнольд Шварценеггер');
$f->addActor('Майкл Бин');
$f->addActor('Линда Хэмилтон');
$f->addActor('Линда Хэмилтон'); //test copy
$f->delActor('Майкл Бин'); //Ради теста :)
echo $f->saveToFile();
_____________
..Работает - не трогай!