Ошибка статических функций строгих стандартов [дубликат]

Вопрос старый, но я не мог найти лучшего решения, которое я здесь размещаю. Найти все USB-накопители, но не перечислять разделы, тем самым удалив «часть [0-9]» из результатов. Я закончил делать два grep, последний отрицает результат:

ls -1 /dev/disk/by-path/* | grep -P "\-usb\-" | grep -vE "part[0-9]*$"

Это приводит к моей системе:

pci-0000:00:0b.0-usb-0:1:1.0-scsi-0:0:0:0

Если мне нужны только разделы, которые я мог бы сделать:

ls -1 /dev/disk/by-path/* | grep -P "\-usb\-" | grep -E "part[0-9]*$"

Где я получаю:

pci-0000:00:0b.0-usb-0:1:1.0-scsi-0:0:0:0-part1
pci-0000:00:0b.0-usb-0:1:1.0-scsi-0:0:0:0-part2

И когда я это делаю:

readlink -f /dev/disk/by-path/pci-0000:00:0b.0-usb-0:1:1.0-scsi-0:0:0:0

Я получаю:

/dev/sdb
6
задан Alex 21 November 2012 в 15:54
поделиться

2 ответа

Абстрактные статические методы являются своего рода нечетным понятием. Статический метод в основном «жестко кодирует» метод для класса, убедившись, что существует только один экземпляр (~ singleton). Но сделать его абстрактным означает, что вы хотите заставить другой класс его реализовать.

Я вижу, что вы пытаетесь сделать, но когда вы занимаетесь абстрактными классами, я бы избегал статических методов в базовом классе. Вместо этого вы можете использовать позднюю статическую привязку (static: :) для вызова метода tableStruct в «дочернем» классе. Это не приводит к тому, что метод будет реализован как абстрактный, но вы можете протестировать реализацию и выбросить исключение, если оно не существует.

public static function foo(){
    // call the method in the child class 
    $x = static::tableStruct();
}
7
ответ дан Brent Baisley 25 August 2018 в 02:49
поделиться

Для чего это стоит ...

Нарушение интерфейсов:

interface Imodel {

    static function tableStruct();        
}

abstract class model implements Imodel {

    private static $tableStruct = array();

    public static function foo() {
        if (!isset(self::$tableStruct[get_called_class()]))
            self::$tableStruct[get_called_class()] = static::tableStruct();

        // I'm using it here!!
    }
}
3
ответ дан drupality 25 August 2018 в 02:49
поделиться
Другие вопросы по тегам:

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