@mega-sinyak

Применима ли константа DIRECTORY_SEPARATOR в связке с basename()?

Кусок базовой модели:
abstract class Model
{
    # какой-то код
    private static function table()
    {
        $class_name = basename(str_replace('\\', '/', static::class));
        return '`' . strtolower(preg_replace('~(?<!^)[A-Z]~', '_$0', $class_name)) . '`';
    }

    /** @return static */
    public static function findOne($id)
    {
        return current(Db::pdo('select * from ' . self::table() . ' where `id` = ?', [
            $id
        ], static::class));
    }
    # какой-то код
}

Применение:
class TestModel extends Model
{
    /*
    * При создании экземпляра этого класса либо при обращении к его статическим методам
    * мы методом table() базовой модели обращаемся к таблице `test_model`
    */
}

Если честно, то лень тестить, НО ЕМНИП вот так не работало где-то (не помню точно на винде или линях):
private static function table()
{
    return '`' . strtolower(preg_replace('#(?<!^)[A-Z]#', '_$0', basename(static::class))) . '`';
}

поэтому был сделан фокус:
$class_name = basename(str_replace('\\', '/', static::class));

Вопрос: можно ли избавиться от str_replace(), применима ли константа DIRECTORY_SEPARATOR в данном случае?
Если можно, то как это запилить всё?
  • Вопрос задан
  • 121 просмотр
Решения вопроса 1
Sanasol
@Sanasol Куратор тега PHP
нельзя просто так взять и загуглить ошибку
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

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