Проверить имя метода, что свидетельствует о правильно


Я с помощью класса библиотеки почты framework Nette.

, Следовательно, в какой-то момент, вместо того, чтобы вызвать метод setSubject - это правильный метод, я позвонил addSubject, потому что забыл имя метода.

Вскоре, была мне возвращена следующая ошибка:

Method addSubject does not exists. Did you mean setSubject?

то есть, он предположил, что правильное имя метода класса было setSubject.

могу ли я сделать это в одной (или нескольких) классов, мои в PHP?

Например:

class Myclass
{
    public function callMethod()
    {
    }
}


(new MyClass)->callMyMethod(); // Lança a exceção sugerindo o nome correto
Author: Guilherme Lautert, 2015-10-27

1 answers

Magic Methods

Это должно быть реализации метода волшебный __колл - .

__call () срабатывает, когда вызываются методы, недоступные в объект.

, Например

class MyClass{

    private $methods = array(
        'runTest' => array(
            'run',
            'RunTest',
            'runstest',
            'runMyTest',
        ),
    );

    public function __call($name, $args){

        $realName = null;
        foreach ($this->methods as $method => $alias){
            foreach ($alias as $k => $wrong){
                if(preg_match("~{$wrong}~i", $name)){
                    $realName = $method;
                    break 2;
                }
            }
        }

        echo "Method {$name} does not exists.";
        if(!empty($realName)){
            echo " Did you mean {$realName}?";
        }
    }

    public function runTest(){
        echo 'HERE';
    }
}

$obj = new MyClass;
$obj->run('in object context'); // Method run does not exists. Did you mean runTest?
$obj->runTest('in object context'); // HERE
 3
Author: Guilherme Lautert, 2015-10-27 15:48:58