whirlwind
TDD infected, paranoid
Если$news = new News();
$comments = new Comments();
$comments->Filter('user_id', 3);
$join = $news->Join($comments);
print $join->ByStr();
get_class($comments->news) === get_class(new News )
тогда join - это поиск referenced атрибута в Comments и постановка условия соединения по этому значению. И делать такое лучше внешним конструктором, т.к. то что получится в результате будет необъявленной сущьностью (т.е. и не News и не Comments). Это будет нечто новое, что без класса можно рассматривать исключительно как recordset. Все это конечно возможно при условии атомизации/унификации атрибутов. В моей интерпретации эт выглядело примерно так
PHP:
$news = new News();
$comments = new Comments();
$comments->Filter('user_id', 3);
$q = new Query;
$q->from($news);
$q->from($comments);
print $q->asStr();