1) Как избежать ситуации когда я вижу код
$o = new Main();
$o->sayHelloWorld();
$o->sayExclamationMark();
Лезу в класс Main и вижу что метода sayHelloWorld в нём нет. Логически понятно что он не в родителе т.к. было бы другое обращение (через parent::) но это всё равно несколько сбивает с толку, особенно если слово use не сразу заметишь.
Есть ли какие-то best practice и негласные соглашения по их использованию, например писать метод
$o->sayHelloWorldTrait();
тогда уже по названию метода понятно и что он делает и откуда берётся.
2) В какой папке хранить трейты если папки проекта разделены на model, view, controller?
3) Вопрос по статическим членам трейта.
Можно сделать в тейте:
trait Counter {
public function config() {
static $admin_mail = 'admini@project.com';
}
}
А можно создать конфиг-класс:
class Configl
{
public $admin_mail = 'admini@project.com';
}
Как лучше и в чём по сути разница между ними выходит?