一步步教你编写不可维护的PHP代码

随着失业率越来越高( 不是中国 ),很多人意识到保全自己的工作是多么的重要。那么,什么是保住自己工作,并让自己无可替代的好方法呢?一个很简单的事实是只要你的代码没有人能够维护,那么你就成功保住了工作。编写不可维护的代码是一个特殊的技能,但奇怪的是,似乎对某些开发者来说是很自然的。不过对于剩下的开发者来说,这里有一些技巧和提示来让你开始写不可维护的代码。

首先要做的事情

第一步,从找工作开始。你应该寻找合适的公司,在那里你可以尽情发挥并实现你那不可维护的潜力。 你不一定需要成为公司的 PHP 大牛如果是那更好。找工作时,如果工作描述提到需要从其它的迁移到 PHP (所以你知道你会做主),或者也可以搜索那种需要10年 PHP5 工作经验的误导性工作,再加上熟练使用 FrontPage 和 Netscape Composer 。一旦你获得这种千载难逢的机会,从第一天开始就要采取措施。在会议上发言,让你的意见被听到。大胆谈论面向对象的架构设计,企业,改革方案,怎样让够好变得更好,当然你也得做出相应的承诺。确保每个人在重要的编码环节都咨询你的意见。

继续阅读“一步步教你编写不可维护的PHP代码”

工程师最重要的能力是什么

        手机响了,是一个实施工程师打过来的,说现场的数据采集不上来,问怎么解决。我问软件的版本,仪器的型号,操作系统的信息,具体的问题描述。我告诉他可能是什么原因,给了一个解决办法,让他尝试一下。他试了一下后,说还是不行,又问怎么办,于是我又给他一个办法,他又去尝试了,反馈回来说还是不行,又问我怎么办。我然后我又给他提供方案,继续解决……终于解决了。

        这种场景不是一次两次了,也不是一个人两个人用这样的方式解决问题了。实际上,问题并不复杂,有些甚至很简单,简单到只需要把重启一下软件就可解决的地步。但是,很多人依然不知道怎样解决问题。类似的情况还包括开发人员在编程遇到bug的时候,无法独立搞定,也一直问同事该怎么解决。

        我们部门有个架构师,他一直从事的是c++语言的开发工作,几乎c++任何方面的疑难问题他都能很快解决。项目上需要使用移动应用、大数据技术、java、js、python等不同开发语言开发时,他也能从头很快学起,为大家指明方向,搭建框架,遇到新问题,总能找到解决办法将问题解决,保证了项目的进度和质量。

继续阅读“工程师最重要的能力是什么”

MySQL8.0.16修改默认文字编码方法

按照网络上的旧方法,尝试修改了一个晚上,brew重装了好多次mysql了,还没搞定。

找到简书上一个大哥的方法,测试成功,特地写个备忘。

[mysqld]
# Only allow connections from localhost
bind-address = 0.0.0.0
socket = /tmp/mysql.sock
default-storage-engine=INNODB

loose_mysqlx_port=33060

character-set-client-handshake = FALSE
character-set-server = utf8mb4
collation-server = utf8mb4_unicode_ci
init_connect='SET NAMES utf8mb4'


[client]
default-character-set = utf8mb4
socket = /tmp/mysql.sock

[mysql]
default-character-set = utf8mb4

泪流满面啊

如何在你的网站上加上IPV6检测功能

现在中国政府正在大力推进ipv6行业发展,个人的小网站可以追一追潮流,具体效果看右侧(手机端在最下面)。

话不多说,直接贴代码,此代码依赖jQuery

<span id="ipv6-span" style="color:red;">你的网络不支持IPV6</span>
<br>
<span id="ipv4-span" style="color:red;">你的网络不支持IPV4</span>
<script>
    jQuery.ajax({
        url: 'https://v4.yinghualuo.cn/bejson',
        type: 'get',
        dataType: 'json',
        success: function(json) {
            jQuery('#ipv4-span').css('color', 'green');
            jQuery('#ipv4-span').html('你的网络完美支持IPV4<br>' + json.ip);
        }
    });
    jQuery.ajax({
        url: 'https://v6.yinghualuo.cn/bejson',
        type: 'get',
        dataType: 'json',
        success: function(json) {
            jQuery('#ipv6-span').css('color', 'green');
            jQuery('#ipv6-span').html('你的网络完美支持IPV6<br>' + json.ip);
        }
    });
</script>

如果您需要在您的网站上调取此跨域请求接口,请联系博主批准后再正式运营。博主不能保证未批准的服务稳定性

ThinkPHP5 框架redis配置

看了半天官方文档 https://www.kancloud.cn/manual/thinkphp5_1/354116

硬是没测试出来怎么写连接到redis配置,于是干搓源码,看到如何写redis配置

/config/cache.php

return [
    // 驱动方式
    'type' => env('CACHE_TYPE', 'File'),
    'path' => '',
    'prefix' => 'app_name_',
    'expire' => 0,
    'host' => env('REDIS_HOST', '127.0.0.1'),
    'password' => env('REDIS_PASSWORD', ''),
];

写个配置示例,作为备忘

php7.4新语法

// A collection of Post objects
$posts = [/* … */];

$ids = array_map(fn($post) => $post->id, $posts);

上面这个代码等同于下面

$ids = array_map(function ($post) {
    return $post->id;
}, $posts);

使用时有几个注意事项:

  • php7.4才开始支持此语法
  • 以fn关键字开始
  • 只允许有一条语句,一般是return 那句话
  • return关键字可以省略
  • 参数类型和返回类型可以声明

声明类型写法如下:

$ids = array_map(fn(Post $post): int => $post->id, $posts);

如果你想返回一个引用类型,可以这么写:

fn&amp;($x) => $x

还有个特性,在匿名函数里面,引入外部变量时,不需要显式use那个变量

$modifier = 5;

array_map(fn($x) => $x * $modifier, $numbers);

以上的代码,$modifier变量在闭包函数中修改值后,在外部的$modifier不会改变其值,但是$this关键字是给例外。

array_map(fn($x) => $x * $this->modifier, $numbers);