schlaus / schange
类型转换器
Requires
- php: >=5.3.0
Requires (Dev)
- phpunit/phpunit: ~4.0
This package is not auto-updated.
Last update: 2024-09-24 01:28:15 UTC
README
Schange
一个可扩展的类型转换器。
安装
通过 Composer,通过要求 "schlaus/schange": "dev-master" 来安装
或者直接下载并包含 src/schange.php
使用方法
Schange 的作用是尝试通过进行一些转换将变量转换为指定的类型。转换逻辑基于我的用例,在不同情况下可能会有些偏颇或荒谬。请家长自行判断。
语法是
$result = schange::castTo("int", "42"); // OR $result = schange::castToInt("42");
一旦加载了自定义的转换函数,它就可以以完全相同的方式使用
$result = schange::castTo("banana", 1); // OR $result = schange::castToBanana(1);
代码和测试相当直接,应该可以很好地了解进行了哪些类型的转换。支持的类型有 布尔型、整数、字符串、数组、浮点型 和 对象。以下是一些示例
string("true") => int(1) string("true") => array("t", "r", "u", "e") float(4.5) => int(5) float(4.4) => int(4) array("tes", "ting", "!", 123) => string("testing!123") NULL => empty variable of target type
此外,关联数组可以转换为对象(stdClass 的实例),其中每个键=>值转换为属性=>值。在将对象转换为数组时,只保留公共属性。在将对象转换为字符串时,首先尝试通过 magic __toString() 方法进行转换,如果没有该方法,则首先将对象转换为数组,然后转换为字符串。只有当给定的变量无法转换为请求的类型时,才返回 null,例如尝试将布尔值转换为数组。如果原始变量是 null,则将其转换为请求类型的空实例。
要检查变量是否可以转换为类型,请使用 schange::canCastTo($type, $var);要获取可能的目标类型列表(作为数组),请使用 schange::castable($var);
使用自定义转换器
转换函数接收两个参数:要转换的变量和变量的当前类型。因此,每个函数只能处理转换到一种目标类型。以下是一个示例,说明转换函数应该是什么样子
function($var, $currentType) { switch($currentType) { case "boolean": return null; break; case "integer": case "double": $arr = str_split(\schlaus\schange\schange::castToStr($var)); foreach ($arr as &$val) { if ($val !== ".") $val = intval($val); } return $arr; break; case "string": return str_split($var); break; case "array": return $var; break; case "object": return json_decode(json_encode($var), true); break; case "NULL": return array(); break; } return null; }
转换函数仅在请求的转换无法完成时返回 null,或者在输入一开始就是 null 时,返回目标类型的空实例。没有用于评估变量是否可以转换为其他类型的单独函数,而是通过实际转换函数进行测试,并根据结果是否为 null 返回结果。
自定义转换器可以一次加载一个函数,也可以加载一个转换器数组
schange::loadCaster("targetType", function($var, $currentType) { /* . . Conversion logic goes here . */ }); // OR schange::loadCaster(array( "type1" => function($var, $currentType) { ... }, "type2" => function($var, $currentType) { ... }, ));
一旦加载,自定义函数就可以像默认函数一样使用。自定义转换器比默认转换器具有优先级,例如,如果您为字符串转换注册了一个函数,则将使用该函数而不是默认函数。
在编写自定义函数时,请注意,如果您想支持 PHP 5.3,则不能在函数中使用 self::...,因为在 PHP 5.3 中闭包不会在正确的范围内运行。相反,请使用完全命名空间类名。
免责声明
我为自己的特定目的创建了此类,并希望它对其他人来说不是非常有用。然而,如果您发现它有用并遇到问题,我很乐意帮助。