In the easysmoole project, use composer to introduce official components: easyswoole/hot-reload

 composer require easyswoole/hot-reload

Then go to the project root directory and find EasySwooleEvent.php
Add the following code to the mainServerCreate node method:

 $hotReloadOptions = new \EasySwoole\HotReload\HotReloadOptions; $hotReload = new \EasySwoole\HotReload\HotReload($hotReloadOptions); $hotReloadOptions->setMonitorFolder([EASYSWOOLE_ROOT . '/App']); $server = ServerManager::getInstance()->getSwooleServer(); $hotReload->attachToServer($server);

Restart easysmoole worker, modify the file and view your console output. appear HOT_RELOAD: reloaded at 1617202822 It means success

Positive number to negative number

 $number = 99; $number *= -1; echo $number;   // Output - 99

Negative to positive

 $number = -11; $result = abs($number); echo $result;   // Output 11

Encapsulated into methods for use

 function plus_minus_conversion($number = 0){ return $number > 0 ? - 1 * $number : abs($number); } echo plus_minus_conversion(100.58);

Cygwin direction key garbled code and deletion key failure resolution

Echo "set nocp">>~/. virc solves the problem of the direction key taking effect;
Echo "set bs=2">>~/. virc Solves the problem of deletion key (backspace key) failure;

If you have vim instead of vi, please change the output file name from. virc to. vimrc

 let sugurl = " https://suggestion.baidu.com/su?wd=#content#&cb=window.baidu.sug ", script = document.createElement("script"); sugurl = sugurl.replace("#content#", config.serarchValue); script.src = sugurl; document.getElementsByTagName("head")[0].appendChild(script); window.baidu = { sug: function (json) { if (json.s.length > 0) { let d = []; for (let i in json.s) { d.push({keywords: json.s[i]}); if (i == (config.searchlimit - 1)) break; } config.searchData.list = d; template(); } } };

Because typeof can only judge five basic types: "number", "string", "undefined", "boolean", "object"

For arrays, functions, and objects, the type cannot be detected in detail. Here, a native extension function of the object is used to distinguish data types more accurately.
The detailed judgment types are as follows:

 console.log(Object.prototype.toString.call("jerry"));// [object String] console.log(Object.prototype.toString.call(12));// [object Number] console.log(Object.prototype.toString.call(true));// [object Boolean] console.log(Object.prototype.toString.call(undefined));// [object Undefined] console.log(Object.prototype.toString.call(null));// [object Null] console.log(Object.prototype.toString.call({name: "jerry"}));// [object Object] console.log(Object.prototype.toString.call(function(){}));// [object Function] console.log(Object.prototype.toString.call([]));// [object Array] console.log(Object.prototype.toString.call(new Date));// [object Date] console.log(Object.prototype.toString.call(/\d/));// [object RegExp] console.log(Object.prototype.toString.call(new Person));// [object Object]

This can be further encapsulated into the method you need and called when necessary.

 getType: function(j){ let type = Object.prototype.toString.call(j) , ret; switch(type){ case '[object Function]': ret = 'function'; break; case '[object String]': ret = 'string'; break; case '[object Number]': ret = 'number'; break; case '[object Object]': ret = 'object'; break; case '[object Array]': ret = 'array'; break; default: ret = false; } return ret; },

Test Type

 let data = ['xx','aa']; console.log(this.getType(data)) // array