GetDuckTypes::from()

Since v1.3.0

Description

GetDuckTypes::from() returns a list of all possible PHP types for a given variable. The list is ordered with the most specific match first.

use GanbaroDigital\MissingBits\TypeInspectors\GetDuckTypes;
public static array GetDuckTypes::from(mixed $item);

Parameters

The input parameters are:

Return Value

GetDuckTypes::from() returns an array. It is a list of the types that $item could substitute for.

The resulting list describes how you can safely treat $item, as long as you are not calling strictly-typed functions and methods.

Use GetStrictTypes instead if you want a list of types that won't cause an error when used with PHP 7's strict type-hinting support.

Example Return Values

Here's a list of examples of accepted input values:

var_dump(GetDuckTypes::from(null));

// outputs
//
// array(1) {
//   ["NULL"]=>
//   string(4) "NULL"
// }
var_dump(GetDuckTypes::from([1,2,3]));

// outputs
//
// array(2) {
//   ["Traversable"]=>
//   string(11) "Traversable"
//   ["array"]=>
//   string(5) "array"
// }
use GanbaroDigital\MissingBits\TypeInspectors\GetStrictTypes;

var_dump(GetDuckTypes::from([GetStrictTypes::class, "from"]));

// outputs
//
// array(3) {
//   ["callable"]=>
//   string(8) "callable"
//   ["Traversable"]=>
//   string(11) "Traversable"
//   ["array"]=>
//   string(5) "array"
// }
var_dump(GetDuckTypes::from(function(){}));

// outputs
//
// array(3) {
//   ["Closure"]=>
//   string(7) "Closure"
//   ["callable"]=>
//   string(8) "callable"
//   ["object"]=>
//   string(6) "object"
// }
var_dump(GetDuckTypes::from(true));

// outputs
//
// array(1) {
//   ["boolean"]=>
//   string(7) "boolean"
// }
var_dump(GetDuckTypes::from(false));

// outputs
//
// array(1) {
//   ["boolean"]=>
//   string(7) "boolean"
// }
var_dump(GetDuckTypes::from(0.0));

// outputs
//
// array(2) {
//   ["double"]=>
//   string(6) "double"
//   ["numeric"]=>
//   string(7) "numeric"
// }
var_dump(GetDuckTypes::from(3.1415927));

// outputs
//
// array(2) {
//   ["double"]=>
//   string(6) "double"
//   ["numeric"]=>
//   string(7) "numeric"
// }
var_dump(GetDuckTypes::from(0));

// outputs
//
// array(2) {
//   ["integer"]=>
//   string(7) "integer"
//   ["numeric"]=>
//   string(7) "numeric"
// }
var_dump(GetDuckTypes::from(100));

// outputs
//
// array(2) {
//   ["integer"]=>
//   string(7) "integer"
//   ["numeric"]=>
//   string(7) "numeric"
// }
var_dump(GetDuckTypes::from(-100));

// outputs
//
// array(2) {
//   ["integer"]=>
//   string(7) "integer"
//   ["numeric"]=>
//   string(7) "numeric"
// }
var_dump(GetDuckTypes::from(new ArrayObject));

// outputs
//
// array(7) {
//   ["ArrayObject"]=>
//   string(11) "ArrayObject"
//   ["IteratorAggregate"]=>
//   string(17) "IteratorAggregate"
//   ["Traversable"]=>
//   string(11) "Traversable"
//   ["ArrayAccess"]=>
//   string(11) "ArrayAccess"
//   ["Serializable"]=>
//   string(12) "Serializable"
//   ["Countable"]=>
//   string(9) "Countable"
//   ["object"]=>
//   string(6) "object"
// }
use GanbaroDigital\MissingBits\TypeInspectors\GetStrictTypes;

var_dump(GetDuckTypes::from(new GetStrictTypes));

// outputs
//
// array(3) {
//   ["GanbaroDigital\MissingBits\TypeInspectors\GetStrictTypes"]=>
//   string(56) "GanbaroDigital\MissingBits\TypeInspectors\GetStrictTypes"
//   ["object"]=>
//   string(6) "object"
// }
var_dump(GetDuckTypes::from((object)[]));

// outputs
//
// array(3) {
//   ["stdClass"]=>
//   string(8) "stdClass"
//   ["Traversable"]=>
//   string(11) "Traversable"
//   ["object"]=>
//   string(6) "object"
// }
var_dump(GetDuckTypes::from(STDIN));

// outputs
//
// array(1) {
//   ["resource"]=>
//   string(8) "resource"
// }
var_dump(GetDuckTypes::from("true"));

// outputs
//
// array(1) {
//   ["string"]=>
//   string(6) "string"
// }
var_dump(GetDuckTypes::from("false"));

// outputs
//
// array(1) {
//   ["string"]=>
//   string(6) "string"
// }
var_dump(GetDuckTypes::from("0.0"));

// outputs
//
// array(3) {
//   ["double"]=>
//   string(6) "double"
//   ["numeric"]=>
//   string(7) "numeric"
//   ["string"]=>
//   string(6) "string"
// }
var_dump(GetDuckTypes::from("3.1415927"));

// outputs
//
// array(3) {
//   ["double"]=>
//   string(6) "double"
//   ["numeric"]=>
//   string(7) "numeric"
//   ["string"]=>
//   string(6) "string"
// }
var_dump(GetDuckTypes::from("0"));

// outputs
//
// array(3) {
//   ["integer"]=>
//   string(7) "integer"
//   ["numeric"]=>
//   string(7) "numeric"
//   ["string"]=>
//   string(6) "string"
// }
var_dump(GetDuckTypes::from("100"));

// outputs
//
// array(3) {
//   ["integer"]=>
//   string(7) "integer"
//   ["numeric"]=>
//   string(7) "numeric"
//   ["string"]=>
//   string(6) "string"
// }
var_dump(GetDuckTypes::from(new Exception(__FILE__)));

// outputs
//
// array(4) {
//   ["Exception"]=>
//   string(9) "Exception"
//   ["Throwable"]=>
//   string(9) "Throwable"
//   ["string"]=>
//   string(6) "string"
//   ["object"]=>
//   string(6) "object"
// }
var_dump(GetDuckTypes::from("hello, world!"));

// outputs
//
// array(1) {
//   ["string"]=>
//   string(6) "string"
// }
var_dump(GetDuckTypes::from(ArrayObject::class));

// outputs
//
// array(8) {
//   ["ArrayObject"]=>
//   string(11) "ArrayObject"
//   ["IteratorAggregate"]=>
//   string(17) "IteratorAggregate"
//   ["Traversable"]=>
//   string(11) "Traversable"
//   ["ArrayAccess"]=>
//   string(11) "ArrayAccess"
//   ["Serializable"]=>
//   string(12) "Serializable"
//   ["Countable"]=>
//   string(9) "Countable"
//   ["class"]=>
//   string(5) "class"
//   ["string"]=>
//   string(6) "string"
// }
var_dump(GetDuckTypes::from(Traversable::class));

// outputs
//
// array(3) {
//   ["Traversable"]=>
//   string(11) "Traversable"
//   ["interface"]=>
//   string(9) "interface"
//   ["string"]=>
//   string(6) "string"
// }

Throws

GetDuckTypes::from() does not throw any exceptions.

Changelog

v1.5.1

v1.5.0