PHP: как создать «дерево» констант - PullRequest
0 голосов
/ 22 мая 2019

Интересно, возможно ли в PHP создать «дерево» констант (без создания экземпляров дерева классов) ... позвольте мне объяснить, что я хотел бы сделать (код неправильный):

abstract class logType {
   const Project = 1;
   const User = 2;
}
abstract class dbConstants {
   const logType = logType;
}

Так что я использую ниже в моем коде:

dbConstants::logType::Project

Ответы [ 2 ]

1 голос
/ 22 мая 2019

Вы можете использовать только скалярные данные (целочисленные, логические, с плавающей точкой и строки), при PHP> 5,6 вы также можете использовать скалярные выражения, массивы и ресурсы в качестве значения константы, как описано здесь . Со структурой массива вы можете сделать что-то вроде этого:

abstract class logType
{
    const PROJECT = 1;
    const USER = 2;
}

abstract class dbConstants
{
    const logType = [
        logType::PROJECT,
        logType::USER
    ];
}

echo dbConstants::logType[logType::PROJECT];

Другой подход заключается в использовании trait с public static членами, подобными этому, если вы не хотите наследовать классы и повторно использовать свой код:

trait logType
{
    public static $PROJECT = 1;
    public static $USER = 2;
}

abstract class dbConstants
{
    use logType;
}

echo dbConstants::$PROJECT;

Другой способ без использования массива:

class logType
{
    const PROJECT = 1;
    const USER = 2;
}

abstract class dbConstants
{
    public static $logType;

    public function __construct()
    {
        $this->logType = new logType();
    }
}

echo dbConstants::$logType::PROJECT;
0 голосов
/ 22 мая 2019

В php 7:

define('animals', [ 'dog', 'cat', 'bird' ]);

Это будет определять постоянный массив.

В PHP 5.6 вы можете использовать const для объявления постоянного массива.

Оба из них могут содержать больше массивов для формирования структуры.

...