есть ли тип данных с разными значениями, такими как логическое - PullRequest
3 голосов
/ 10 июля 2020

Есть ли тип данных в javaScript или PHP et c. которые могут содержать просто просмотр различных пользовательских значений. Подобно логическому, но с тремя типами. Примерно так:
значение должно быть одним из следующих: «вверху», «внизу» или «посередине».

Ответы [ 3 ]

1 голос
/ 10 июля 2020

Нет в PHP, но вы можете создать свои собственные типы следующим образом:

class catLocation
{
    protected $val;
    protected $allowed = ['on', 'under'];

    public function __construct(string $val)
    {
        if(!in_array($val, $this->allowed)) {
            throw new InvalidArgumentException('catLocation must be on or under');
        }
        $this->val = $val;
    }

    public function __invoke()
    {
         return $this->val;   
    }
}

... напечатайте это в определениях ваших функций:

function whereIsCat(catLocation $loc) {
    return 'The cat is ' . $loc() . ' the table.'; 
    // Calling your object like a function will call the "magic" __invoke() method
}

... и используйте его так:

$kitty_loc = new catLocation('under');

echo whereIsCat($kitty_loc); // The cat is under the table.
1 голос
/ 10 июля 2020

Эй, в JavaScript такого нет, но вы можете использовать число и создать какое-то перечисление, подобное этому

const ENUM = {
  ABOVE: 1,
  MIDDLE: 0,
  UNDER: -1
}

, а затем использовать его так:


function acceptValue(en) {
  if (en === ENUM.ABOVE) {
    /* do something */
  }
}
0 голосов
/ 13 августа 2020

решение с этого сайта: https://www.sohamkamani.com/blog/2017/08/21/enums-in-javascript/

const seasons = {
  SUMMER: {
    BEGINNING: "summer.beginning",
    ENDING: "summer.ending"
  },
  WINTER: "winter",
  SPRING: "spring",
  AUTUMN: "autumn"
};

let season = seasons.SUMMER.BEGINNING;

if (!season) {
  throw new Error("Season is not defined");
}

switch (season) {
  case seasons.SUMMER.BEGINNING:
  // Do something for summer beginning
  case seasons.SUMMER.ENDING:
  // Do something for summer ending
  case seasons.SUMMER:
  // This will work if season = seasons.SUMMER
  // Do something for summer (generic)
  case seasons.WINTER:
  //Do something for winter
  case seasons.SPRING:
  //Do something for spring
  case seasons.AUTUMN:
  //Do something for autumn
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...