Как я могу получить имя класса от статического вызова в расширенном классе PHP?

Я предлагаю вам использовать метод оценки важности функций. Существует много разных способов проверить важность функций. Поначалу, на мой взгляд, лёгким является классификатор Random Forest. Эта модель имеет встроенную оценку важности функций во время обучения, основанную на ошибке «из пакета». Древовидные классификаторы должны оценивать прирост информации после получения значения функции в процессе обучения.

Вы также можете проверить важность функции, проверив оценку модели, изменив набор данных, то есть используя стратегию обратной ликвидации.

Вы также можете использовать PCA или статистические тесты. Наконец, вы также можете найти зависимость между функцией, чтобы удалить из вашей функции данных, которые не предоставляют достаточно информации.

80
задан TRiG 22 July 2014 в 17:03
поделиться

4 ответа

__CLASS__ всегда возвраты название класса, в котором это использовалось, таким образом, это не много справки со статическим методом. Если бы метод не был статическим, то Вы могли бы просто использовать ($this) get_class . например,

class Action {
    public function n(){
        echo get_class($this);
    }

}

class MyAction extends Action {

}

$foo=new MyAction;

$foo->n(); //displays 'MyAction'

Последние статические связывания, доступные в PHP 5.3 +

Теперь, когда PHP 5.3 выпущен, можно использовать последние статические связывания , которые позволяют Вам разрешить, что целевой класс для статического метода заходит во время выполнения скорее чем, когда это определяется.

, В то время как функция не представляет новую волшебную константу, чтобы сказать Вам имя класса, Вас позвонили через, это действительно обеспечивает новую функцию, get_called_class () , который может сказать Вам название класса, статический метод был призван. Вот пример:

Class Action {
    public static function n() {
        return get_called_class();
    }
}


class MyAction extends Action {

}


echo MyAction::n(); //displays MyAction
166
ответ дан Paul Dixon 24 November 2019 в 09:47
поделиться

Нет никакого способа, в доступных версиях PHP, сделать то, что Вы хотите. Решением Paul Dixon является единственное. Я имею в виду, пример кода, поскольку последняя функция статических связываний, о которой он говорит, доступна с PHP 5.3, который является в бета-версии.

0
ответ дан Ionuț G. Stan 24 November 2019 в 09:47
поделиться

Now (when 5.3 has arrived) it's pretty simple:

http://php.net/manual/en/function.get-called-class.php

12
ответ дан 24 November 2019 в 09:47
поделиться

It's not the ideal solution, but it works on PHP < 5.3.0.

The code was copied from septuro.com

if(!function_exists('get_called_class')) {
    class class_tools {
        static $i = 0;
        static $fl = null;

        static function get_called_class() {
            $bt = debug_backtrace();

            if (self::$fl == $bt[2]['file'].$bt[2]['line']) {
                self::$i++;
            } else {
                self::$i = 0;
                self::$fl = $bt[2]['file'].$bt[2]['line'];
            }

            $lines = file($bt[2]['file']);

            preg_match_all('/([a-zA-Z0-9\_]+)::'.$bt[2]['function'].'/',
                $lines[$bt[2]['line']-1],
                $matches);

            return $matches[1][self::$i];
        }
    }

    function get_called_class() {
        return class_tools::get_called_class();
    }
}
16
ответ дан 24 November 2019 в 09:47
поделиться
Другие вопросы по тегам:

Похожие вопросы: