Я не совсем понимаю, что вы имеете в виду, но ...
Я думаю, вам нужно что-то вроде этого:
class Case {
private $comment;
public function getComment() {
// Add some checks if necessary
...
return $this->comment;
}
public function addComment(Comment $comment) {
// Add some checks if necessary
...
$this->comment = $comment;
}
}
Вы также можете выбрать защиту своего комментария. Это особенно полезно, если вы хотите расширить объект.
Всегда широко используйте инкапсуляцию, это одно из самых больших преимуществ ООП. Всегда целесообразно сделать свойство класса защищенным или частным. Без этого вы не сможете принудительно проверять его, когда устанавливаете свойства. Имейте в виду, что если вы сделаете свойство общедоступным, каждый класс сможет получить к нему доступ и изменить его без каких-либо проверок. Подумайте о возможных последствиях этого!
$ comment не примитивный тип, это ссылка на экземпляр комментария clas
Удачи!
@ Гордон: Не имеет значения. Даже если это экземпляр Комментария, и вы делаете его публичным, вы все равно можете сделать что-то вроде:
// $Case is a Case object, doh ;)...
$Case->comment = "Just a string value";
И вдруг ваш комментарий является примитивным типом, в то время как вы ожидаете экземпляр класса Comment ... Это может привести к нескольким ошибкам. Если вы сделаете это защищенным или частным свойством, строка кода будет просто невозможна вне класса. Тогда вы вынуждены использовать для него сеттер, например:
public function setComment(Comment $comment) {
...
}
Ваша функция ожидает комментарий и выдаст ошибку, если что-то еще будет дано. Это обеспечит согласованность вашего объекта.
@ Гордон: Это не метод класса Comment, который вы строите в своем классе Case. Описанные выше методы необходимы только для вашего класса Case. Единственное, что они делают - это получение объекта Comment, который принадлежит классу Case, и Setting объекта Comment, который принадлежит классу Case. После того, как вы успешно получили объект Comment с помощью метода get, вы можете запустить все открытые методы, определенные в вашем классе Comment. Так что он ничего не делает с самим объектом Comment.
Ваш комментарий все еще полностью независим. Связь между этими объектами (скорее всего) сохраняется в таблице объекта Case. Ваш класс Case является единственным классом, который знает об отношениях. Таким образом, вы все еще можете повторно использовать свой класс Comment для других целей.
Ваш класс Case должен каким-то образом знать ваш класс Comment, и это путь!
Кстати, рассмотрим отношения многие ко многим. Я полагаю, что дело может иметь более одного комментария.
Удачи!