[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Верна ли грамматика ООП
Страницы: 1, 2
maximka787
Парни, решил по полной переучиваться на ООП. Написал класс. Посмотрите, есть ли в нем грубые ошибки и верно ли в целом логика. А то недавно делал класс по БД и понял, что не с того начал :)

Вот вопросы:

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();


_____________
..Работает - не трогай!
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.