{
	"$… = ( … ) ? … : …": {
		"prefix": "if?",
		"body": "$${1:retVal} = (${2:condition}) ? ${3:a} : ${4:b} ;",
		"description": "Ternary conditional assignment"
	},
	"$… = array (…)": {
		"prefix": "array",
		"body": "$${1:arrayName} = array($0);",
		"description": "Array initializer"
	},
	"$… = […]": {
		"prefix": "shorray",
		"body": "$${1:arrayName} = [$0];",
		"description": "Array initializer"
	},
	"… => …": {
		"prefix": "keyval,kvp",
		"body": "'$1' => $2$0",
		"description": "Key-Value pair"
	},
	"$a <=> $b": {
		"prefix": "spaceship",
		"body": "(${1:\\$a} <=> ${2:\\$b} === ${3|0,1,-1|})",
		"description": "Spaceship equality check"
	},
	"attribute": {
		"prefix": "attr",
		"body": [
			"#[\\\\Attribute]",
			"class ${1:My}Attribute${2: extends ${3:MyOther}Attribute} {",
			"\t$0",
			"}"
		],
		"description": "Attribute"
	},
	"attribute target": {
		"prefix": "attr_target",
		"body": "\\Attribute::${1|TARGET_ALL,TARGET_CLASS,TARGET_FUNCTION,TARGET_METHOD,TARGET_PROPERTY,TARGET_CLASS_CONSTANT,TARGET_PARAMETER,IS_REPEATABLE|}$0"
	},
	"attribute with target": {
		"prefix": "attr_with_target",
		"body": [
			"#[\\\\Attribute(\\Attribute::${1|TARGET_ALL,TARGET_CLASS,TARGET_FUNCTION,TARGET_METHOD,TARGET_PROPERTY,TARGET_CLASS_CONSTANT,TARGET_PARAMETER,IS_REPEATABLE|}$2)]",
			"class ${3:My}Attribute${4: extends ${5:MyOther}Attribute} {",
			"\t$0",
			"}"
		],
		"description": "Attribute - Chain targets with attr_target snippet"
	},
	"case …": {
		"prefix": "case",
		"body": [
			"case '${1:value}':",
			"\t${0:# code...}",
			"\tbreak;"
		],
		"description": "Case Block"
	},
	"class …": {
		"prefix": "class",
		"body": [
			"${1:${2|final ,readonly |}}class ${3:${TM_FILENAME_BASE}}${4: extends ${5:AnotherClass}} ${6:implements ${7:Interface}}",
			"{",
			"\t$0",
			"}",
			""
		],
		"description": "Class definition"
	},
	"class __construct": {
		"prefix": "construct",
		"body": [
			"${1|public,private,protected|} function __construct(${2:${3:Type} $${4:var}${5: = ${6:null}}}$7) {",
			"\t\\$this->${4:var} = $${4:var};$0",
			"}"
		]
	},
	"class function …": {
		"prefix": "class_fun",
		"body": [
			"${1|public ,private ,protected |}${2: static }function ${3:FunctionName}(${4:${5:${6:Type} }$${7:var}${8: = ${9:null}}}$10) : ${11:Returntype}",
			"{",
			"\t${0:# code...}",
			"}"
		],
		"description": "Function for classes, traits and enums"
	},
	"const": {
		"prefix": "const",
		"body": "${1|public ,private ,protected |}const ${2:NAME} = $3;",
		"description": "Constant for classes, traits, enums"
	},
	"enum": {
		"prefix": "enum",
		"body": [
			"enum $1 {",
			"\tcase $2;$0",
			"}"
		]
	},
	"define(…, …)": {
		"prefix": "def",
		"body": [
			"define('$1', ${2:'$3'});",
			"$0"
		],
		"description": "Definition"
	},
	"do … while …": {
		"prefix": "do",
		"body": [
			"do {",
			"\t${0:# code...}",
			"} while (${1:$${2:a} <= ${3:10}});"
		],
		"description": "Do-While loop"
	},
	"else …": {
		"prefix": "else",
		"body": [
			"else {",
			"\t${0:# code...}",
			"}"
		],
		"description": "Else block"
	},
	"elseif …": {
		"prefix": "elseif",
		"body": [
			"elseif (${1:condition}) {",
			"\t${0:# code...}",
			"}"
		],
		"description": "Elseif block"
	},
	"for …": {
		"prefix": "for",
		"body": [
			"for ($${1:i}=${2:0}; $${1:i} < $3; $${1:i}++) { ",
			"\t${0:# code...}",
			"}"
		],
		"description": "For-loop"
	},
	"foreach …": {
		"prefix": "foreach",
		"body": [
			"foreach ($${1:variable} as $${2:key}${3: => $${4:value}}) {",
			"\t${0:# code...}",
			"}"
		],
		"description": "Foreach loop"
	},
	"function": {
		"prefix": "fun",
		"body": [
			"function ${1:FunctionName}($2)${3: : ${4:Returntype}} {",
			"\t$0",
			"}"
		],
		"description": "Function - use param snippet for parameters"
	},
	"anonymous function": {
		"prefix": "fun_anonymous",
		"body": [
			"function ($1)${2: use ($${3:var})} {",
			"\t$0",
			"}"
		],
		"description": "Anonymous Function"
	},
	"if …": {
		"prefix": "if",
		"body": [
			"if (${1:condition}) {",
			"\t${0:# code...}",
			"}"
		],
		"description": "If block"
	},
	"if … else …": {
		"prefix": "ifelse",
		"body": [
			"if (${1:condition}) {",
			"\t${2:# code...}",
			"} else {",
			"\t${3:# code...}",
			"}",
			"$0"
		],
		"description": "If Else block"
	},
	"match": {
		"prefix": "match",
		"body": [
			"match (${1:expression}) {",
			"\t$2 => $3,",
			"\t$4 => $5,$0",
			"}"
		],
		"description": "Match expression; like switch with identity checks. Use keyval snippet to chain expressions"
	},
	"param": {
		"prefix": "param",
		"body": "${1:Type} $${2:var}${3: = ${4:null}}$5",
		"description": "Parameter definition"
	},
	"property": {
		"prefix": "property",
		"body": "${1|public ,private ,protected |}${2|static ,readonly |}${3:Type} $${4:var}${5: = ${6:null}};$0",
		"description": "Property"
	},
	"PHPDoc class …": {
		"prefix": "doc_class",
		"body": [
			"/**",
			" * ${8:undocumented class}",
			" */",
			"${1:${2|final ,readonly |}}class ${3:${TM_FILENAME_BASE}}${4: extends ${5:AnotherClass}} ${6:implements ${7:Interface}}",
			"{",
			"\t$0",
			"}",
			""
		],
		"description": "Documented Class Declaration"
	},
	"PHPDoc function …": {
		"prefix": "doc_fun",
		"body": [
			"/**",
			" * ${1:undocumented function summary}",
			" *",
			" * ${2:Undocumented function long description}",
			" *",
			"${3: * @param ${4:Type} $${5:var} ${6:Description}}",
			"${7: * @return ${8:type}}",
			"${9: * @throws ${10:conditon}}",
			" **/",
			"${11:public }function ${12:FunctionName}(${13:${14:${4:Type} }$${5:var}${15: = ${16:null}}}17)",
			"{",
			"\t${0:# code...}",
			"}"
		],
		"description": "Documented function"
	},
	"PHPDoc param …": {
		"prefix": "doc_param",
		"body": [
			"* @param ${1:Type} ${2:var} ${3:Description}$0"
		],
		"description": "Paramater documentation"
	},
	"PHPDoc trait": {
		"prefix": "doc_trait",
		"body": [
			"/**",
			" * $1",
			" */",
			"trait ${2:TraitName}",
			"{",
			"\t$0",
			"}",
			""
		],
		"description": "Trait"
	},
	"PHPDoc var": {
		"prefix": "doc_var",
		"body": [
			"/** @var ${1:Type} $${2:var} ${3:description} */",
			"${4:protected} $${2:var}${5: = ${6:null}};$0"
		],
		"description": "Documented Class Variable"
	},
	"Region End": {
		"prefix": "#endregion",
		"body": [
			"#endregion"
		],
		"description": "Folding Region End"
	},
	"Region Start": {
		"prefix": "#region",
		"body": [
			"#region"
		],
		"description": "Folding Region Start"
	},
	"switch …": {
		"prefix": "switch",
		"body": [
			"switch (\\$${1:variable}) {",
			"\tcase '${2:value}':",
			"\t\t${3:# code...}",
			"\t\tbreak;",
			"\t$0",
			"\tdefault:",
			"\t\t${4:# code...}",
			"\t\tbreak;",
			"}"
		],
		"description": "Switch block"
	},
	"$this->…": {
		"prefix": "this",
		"body": "\\$this->$0;",
		"description": "$this->..."
	},
	"Throw Exception": {
		"prefix": "throw",
		"body": [
			"throw new $1Exception(${2:\"${3:Error Processing Request}\"}${4:, ${5:1}});",
			"$0"
		],
		"description": "Throw exception"
	},
	"trait …": {
		"prefix": "trait",
		"body": [
			"trait ${1:TraitName}",
			"{",
			"\t$0",
			"}",
			""
		],
		"description": "Trait"
	},
	"Try Catch Block": {
		"prefix": "try",
		"body": [
			"try {",
			"\t${1://code...}",
			"} catch (${2:\\Throwable} ${3:\\$th}) {",
			"\t${4://throw \\$th;}",
			"}"
		],
		"description": "Try catch block"
	},
	"use function": {
		"prefix": "use_fun",
		"body": "use function $1;"
	},
	"use const": {
		"prefix": "use_const",
		"body": "use const $1;"
	},
	"use grouping": {
		"prefix": "use_group",
		"body": [
			"use${1| const , function |}$2\\{",
			"\t$0,",
			"}"
		],
		"description": "Use grouping imports"
	},
	"use as ": {
		"prefix": "use_as",
		"body": "use${1| const , function |}$2 as $3;",
		"description": "Use as alias"
	},
	"while …": {
		"prefix": "while",
		"body": [
			"while (${1:$${2:a} <= ${3:10}}) {",
			"\t${0:# code...}",
			"}"
		],
		"description": "While-loop"
	}
}
