ПРИМЕЧАНИЕ. То, что вы предлагаете, является плохой идеей! За почти 15 лет разработки PHP я никогда не сталкивался с проблемой, которую можно решить, только динамически добавляя методы в класс или дажегде это было бы лучшим решением, и этот вид магии приведет только к путанице позже, когда какой-то бедняга должен вернуться и исправить или исправить то, что вы сделали.Тот факт, что вы думаете, что вам нужно сделать это большой красный флаг, что в вашем дизайне есть что-то принципиально неправильное, и вы должны пересмотреть это.
Также обратите внимание, что я на самом деле не проверял это.
Если вы добавите анонимный метод в класс и реализуете магический метод __ call , тогда вы сможете создать что-то похожее на то, что вы пытаетесь реализовать.
class ScaryClass
{
public function __call($method, array $args)
{
call_user_func_array($this->$method, $args);
}
}
$scaryInstance = new ScaryClass;
$scaryInstance->scaryMethod = function($argument)
{
echo $argument;
}
$scaryInstance->scaryMethod("This code is really scary and I feel like a terrible person for having even written it");
Однако у этого есть множество проблем, самая большая из которых заключается в том, что анонимная функция не имеет представления о контексте, в котором она вызывается, и поэтому вы не можете использовать $ this или делать какие-либо предположения относительнохостинг класс вообще.Это делает этот трюк практически бесполезным на практике.
Так что TL: DR, да, вы можете это сделать (вроде), но это не будет работать очень хорошо, это будет очень запутанно, и в этом нет никакой пользы и огромное количество недостатков.Теперь вы знаете, как это сделать, не делайте этого .