CommUtil.php 10 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405
  1. <?php
  2. namespace loyalsoft;
  3. /**
  4. * Description of CommUtil
  5. * 通用辅助单元
  6. * 常用的辅助方法都写在这里
  7. * @author jgao,gwang
  8. */
  9. class CommUtil {
  10. //put your code here
  11. /**
  12. * 编码 * data => gzdeflate => base64_encode
  13. * // RFC 1950 - zlib
  14. * $compressedData = zlib_encode($uncompressedData, 15);
  15. * // RFC 1951 - raw deflate
  16. * $compressedData = zlib_encode($uncompressedData, -15);
  17. * // RFC 1952 - gzip
  18. * $compressedData = zlib_encode($uncompressedData, 31);
  19. * @link http://php.net/manual/en/function.zlib-encode.php 参考
  20. * @param string $data
  21. * @return string
  22. */
  23. public static function zb64encode($data) {
  24. return base64_encode(gzdeflate($data));
  25. }
  26. /**
  27. * 解码 * data => base64_decode => gzinflate
  28. * // RFC 1950 - zlib
  29. * $compressedData = zlib_encode($uncompressedData, 15);
  30. * // RFC 1951 - raw deflate
  31. * $compressedData = zlib_encode($uncompressedData, -15);
  32. * // RFC 1952 - gzip
  33. * $compressedData = zlib_encode($uncompressedData, 31);
  34. * @link http://php.net/manual/en/function.zlib-encode.php 参考
  35. * @param string $data
  36. * @return string
  37. */
  38. public static function zb64decode($data) {
  39. return gzinflate(base64_decode($data));
  40. }
  41. /**
  42. *
  43. * @param int $min
  44. * @param int $max
  45. * @return type
  46. */
  47. public static function random($min, $max) {
  48. return rand($min, $max);
  49. }
  50. /**
  51. * 在1到1万之间取一个随机值
  52. * @return type
  53. */
  54. public static function random10K() {
  55. return self::random(1, 10000);
  56. }
  57. /**
  58. * 直接计算百分比是否落在区间内,相当于骰一次100面骰子,且结果正好小于参数指定的值.
  59. * @param float $percent 百分之x(精度±0.01%)
  60. * @return boolean true 本地投筛子成功, false 失败
  61. */
  62. public static function randomPercent($percent) {
  63. return (self::random(1, 10000) / 100) <= $percent;
  64. }
  65. /**
  66. * 对象装箱
  67. * @param type $surObj 原始obj
  68. * @param type $desObj 具体obj
  69. */
  70. public static function loadObject($surObj, &$desObj) {
  71. if ($surObj == null || $desObj == null) {
  72. return;
  73. }
  74. foreach ($desObj as $key => $value) {
  75. if (property_exists($surObj, $key)) {
  76. $desObj->$key = $surObj->$key;
  77. }
  78. }
  79. }
  80. /**
  81. * 方法调用
  82. * @param type $func
  83. * @param type $paras
  84. * @param type $class
  85. */
  86. public static function callFunction($func, $paras, $class = "") {
  87. if ($class == "" || $class == null) {
  88. call_user_func_array($func, $paras);
  89. } else {
  90. call_user_func_array(array($class, $func), $paras);
  91. }
  92. }
  93. /**
  94. * 浮点数转整形
  95. * @param type $value
  96. * @return type
  97. */
  98. public static function floatToInt($value) {
  99. return intval(round($value - 0.49999));
  100. }
  101. /**
  102. * 浮点数转上整形
  103. * @param type $value
  104. * @return type
  105. */
  106. public static function floatToCeil($value) {
  107. return round($value + 0.49999);
  108. }
  109. /**
  110. * 解析异常描述信息
  111. * @param type $e
  112. * @return type
  113. */
  114. public static function getExceptMsg($e) {
  115. return 'Msg:' . $e->getMessage() . ' Code:' . $e->getCode() . ' File:' . $e->getFile() . ' Line:' . $e->getLine();
  116. }
  117. /**
  118. * 字符串分割
  119. * @param type $str
  120. * @param type $char
  121. * @return type
  122. */
  123. public static function split($str, $char) {
  124. $strArr = explode($char, $str);
  125. return $strArr;
  126. }
  127. /**
  128. * 属性是否存在
  129. * @param type $obj
  130. * @param type $property
  131. * @return type
  132. */
  133. public static function isPropertyExists($obj, $property) {
  134. // DebugHelper::var_dump($property);
  135. return property_exists($obj, $property);
  136. }
  137. /**
  138. * 元素是否位于某数组中
  139. * @param type $array
  140. * @param type $item
  141. * @return type
  142. */
  143. public static function isInArray($array, $item) {
  144. return in_array($item, $array);
  145. }
  146. /**
  147. * 统计数组元素数或者对象属性个数
  148. * @param type $var
  149. * @return type
  150. */
  151. public static function count($var) {
  152. return count((array) $var);
  153. }
  154. /**
  155. * 兼容数值和字符串两种类型的变量,都可认为是int值.
  156. * @param type $var
  157. * @return boolean
  158. */
  159. static function isInt($var) {
  160. if (is_numeric($var) || is_string($var)) {
  161. $int = intval($var);
  162. return (string) $int === (string) $var;
  163. }
  164. return false;
  165. }
  166. /**
  167. * 字符串包含判定
  168. * @param type $string 完整字符串
  169. * @param type $sub 子串
  170. * @return type
  171. */
  172. public static function isInString($string, $sub) {
  173. return strpos($string, $sub) >= 0;
  174. }
  175. /**
  176. * 对数组/关联数组进行key=>value模式的遍历
  177. * @param array $array 原始数组
  178. * @param callable $callback ($key,$val)
  179. * @return array 返回callback返回true的item的集合
  180. */
  181. public static function arrayKVfilter(array $array, $callback = null) {
  182. if ($callback == null) {
  183. $callback = function ($key, $val) {
  184. return (bool) $val;
  185. };
  186. }
  187. $return = array();
  188. foreach ($array as $key => $val) {
  189. if ($callback($key, $val)) {
  190. $return[$key] = $val;
  191. }
  192. }
  193. return $return;
  194. }
  195. /**
  196. * PHP stdClass Object转array
  197. *
  198. */
  199. public static function object_array($array) {
  200. if (is_object($array)) {
  201. $array = (array) $array;
  202. }
  203. if (is_array($array)) {
  204. foreach ($array as $key => $value) {
  205. $array[$key] = self::object_array($value);
  206. }
  207. }
  208. return $array;
  209. }
  210. /**
  211. * 数组转对象
  212. * @param type $arr
  213. * @return \stdClass
  214. */
  215. public static function array2obj($arr) {
  216. $obj = new \stdClass();
  217. if (!is_null($arr)) {
  218. $vars = is_array($arr) ? $arr : (array) $arr; # 关联数组
  219. foreach ($vars as $name => $value) {
  220. $obj->$name = $value; # 取参数中的或者默认值
  221. }
  222. }
  223. return $obj;
  224. }
  225. /**
  226. * 将转义符"\"增加为"\\",方便入库
  227. * * */
  228. public static function parseBackslash($str) {
  229. return str_replace("\\\\", "\\\\\\\\", $str);
  230. }
  231. /**
  232. * Zip压缩启用
  233. */
  234. public static function output_compress() {
  235. ini_set("zlib.output_compression", "On");
  236. }
  237. /**
  238. * 将任意编码格式的字符串转换为utf-8编码
  239. * @param 原始字符串 $str
  240. * @return 转换后的字符串
  241. */
  242. public static function str2UTF8($str) {
  243. $str = $str?$str:''; # 防空字符串
  244. if (false !== mb_detect_encoding($str, 'UTF-8', true)) {
  245. return $str;
  246. }
  247. if (false !== mb_detect_encoding($str, 'gbk', true)) {
  248. return iconv('gbk', 'UTF-8', $str);
  249. }
  250. return iconv(mb_detect_encoding($str), 'UTF-8//IGNORE', $str);
  251. }
  252. /**
  253. * 查找变量/对象的引用名称
  254. * @param mixed $var 变量/对象
  255. * @return type
  256. */
  257. static function getReference(&$var, $scope = false) {
  258. if (is_object($var)) {
  259. $var->___uniqid = uniqid();
  260. } else {
  261. $var = serialize($var);
  262. }
  263. if (!$scope) {
  264. $scope = $GLOBALS;
  265. }
  266. $name = self::getReference_traverse($var, $scope);
  267. if (is_object($var)) {
  268. unset($var->___uniqid);
  269. } else {
  270. $var = unserialize($var);
  271. }
  272. return "\${$name}";
  273. }
  274. private static function getReference_traverse(&$var, $arr) {
  275. $name = array_search($var, $arr, true);
  276. if (false !== $name) {
  277. return "{$name}";
  278. }
  279. foreach ($arr as $key => $value) {
  280. if (is_object($value)) {
  281. $name = self::getReference_traverse($var, get_object_vars($value));
  282. if (false !== $name) {
  283. return "{$key}->{$name}";
  284. }
  285. }
  286. }
  287. return "-";
  288. }
  289. }
  290. /**
  291. * 仿C#的nameof
  292. * @param type $var
  293. * @return type
  294. */
  295. function nameof(&$var, $scope = false) {
  296. if (!$scope) {
  297. $scope = $GLOBALS;
  298. }
  299. return CommUtil::getReference($var, $scope);
  300. }
  301. function arr2obj($arr) {
  302. return CommUtil::array2obj($arr);
  303. }
  304. function obj2arr($obj) {
  305. return CommUtil::object_array($obj);
  306. }
  307. /**
  308. * 设定脚本内使用的date函数的时区为中华人民共和国
  309. */
  310. function default_timezone() {
  311. date_default_timezone_set("PRC");
  312. }
  313. /**
  314. * 如果变量为null则取默认值
  315. * @param type $obj
  316. * @param type $defaultValue
  317. */
  318. function my_null_default($obj, $defaultValue) {
  319. return ($obj === null) ? $defaultValue : $obj; # 注意这里必须用===判断
  320. }
  321. /**
  322. * 确保指定变量不为空(若为空则用stdclass初始化)
  323. * @param \stdClass $obj
  324. */
  325. function my_default_Obj(&$obj) {
  326. if (null == $obj) {
  327. $obj = new \stdClass();
  328. }
  329. }
  330. /**
  331. * 确保指定变量不为空(若为空则用array()初始化)
  332. * @param \array $arr
  333. */
  334. function my_default_Arr(&$arr) {
  335. if (null == $arr) {
  336. $arr = array();
  337. }
  338. }
  339. /**
  340. * 对象初始化
  341. * @return type
  342. */
  343. function ObjectInit() {
  344. return new \stdClass();
  345. }
  346. /**
  347. * 数组初始化
  348. * @return type
  349. */
  350. function ArrayInit() {
  351. return array();
  352. }
  353. /**
  354. * 自己写的int判断,相比于系统的要更私人定制化一点,兼容识别字符串类型的变量.(wanggangzero@qq.com)2020年11月24日14:33:02
  355. * @param type $var
  356. * @return type
  357. */
  358. function isInt($var) {
  359. return CommUtil::isInt($var);
  360. }
  361. /**
  362. * 是否处于编辑器中,辅助智能感知代码的 gwang(⊙ω⊙)
  363. * @return bool 是否处于编辑器中
  364. */
  365. function isEditor() {
  366. return false; # 永久性的false就好
  367. }