Skip to content

Instantly share code, notes, and snippets.

@rafageist
Last active July 25, 2019 03:09
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save rafageist/aef9825b7c935cdeb0c6187a2d363909 to your computer and use it in GitHub Desktop.
Save rafageist/aef9825b7c935cdeb0c6187a2d363909 to your computer and use it in GitHub Desktop.
PHP Enum Solution
<?php
/**
* This is a trick or solution for create enumerations in PHP using classes
* If you are curious you will realize that you can build a hierarchy of
* enumerations, even give other uses to those classes.
*
* @author rafageist
*/
// Variant 1: Create a that simple abstract class (with or without namespace) ...
// ... I like namespaces
namespace Enums {
abstract class Enum {
public function __toString() {
return get_class($this); // the name of the class is the value !!
}
}
// create enum as abstract class
abstract class Temperature extends Enum {}
// create the items as classes
class HOT extends Temperature {}
class COLD extends Temperature {}
}
// Variant 2: with traits
/*
namespace Enums {
trait Enum {
public function __toString() {
return get_class($this); // the name of the class is the value !!
}
}
// create your enum
abstract class Temperature {}
// create the items of your enum
class HOT extends Temperature { use Enum; }
class COLD extends Temperature { use Enum; }
}
*/
<?php
include "Enums.php";
use Enums;
function doSome(Temperature $data){
echo $data."\n";
if ($data instanceof HOT) echo "is hot\n";
if ($data instanceof COLD) echo "is cold\n";
if ($data == 'HOT') echo "super hot \n";
if ($data == 'COLD') echo "super cold \n";
switch($data) {
case 'HOT':
echo "1 is case of hot\n";
break;
case 'COLD':
echo "1 is case of cold\n";
break;
}
switch($data) {
case HOT::class:
echo "2 is case of hot\n";
break;
case COLD::class:
echo "2 is case of cold\n";
break;
}
switch(true) {
case $data instanceof HOT:
echo "3 is case of hot !!\n";
break;
case $data instanceof COLD:
echo "3 is case of cold !!\n";
break;
}
}
doSome(new HOT());
doSome(new COLD());
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment