2022年2月

通用

序号 名称 描述
1 chinese(simplified ...) 简体中文语言包
2 live server html 实时预览
3 prettier-code formatter 最流行的代码格式化插件
4 better comments 自定义注释颜色
5 path intellisense 路径自动感知填充
6 helium icon theme 一款我喜欢的文件图标主题
7 one dark pro 经典的主题,使用者众多,很耐看
8 material theme 经典"材料"主题
9 material theme icons 常与material theme配置的文件图标
10 shades of purple 赛博朋克风格的一款主题,很明亮风骚
11 dracula official 经典的吸血鬼主题
12 dracula at night 个人更喜欢这款小众的吸血鬼暗黑版(教学用它)
13 code runner 几乎可以快速运行常见的所有语言,如php,java,js...
14 codesnap 快速生成苹果电脑风格的代码片断截图,分享时使用

Markdown

序号 名称 描述
1 markdown preview... markdown 实时预览
2 markdownlint markdown 语法检查器

HTML

序号 名称 描述
1 auto close tag 标签自动关闭
2 auto rename tag 标签自动更名
3 indent-rainbow 以不同颜色显示代码缩进
4 css peek 查看并跳转到 css 定义位置
5 html css support css 自动智能补齐
6 intellsense for css ... html 中的 css 智能提示
7 easy less less 实时编译
8 px-to-viewport px 自动转 vw
9 svg preview svg 预览器
10 tailwind css ... 无需离开 html 就可快速构建出现代网页
11 tabout 按 tab 就可快速跳到下一下,或跳出/越过括号等

JS/VUE/ES6

序号 名称 描述
1 bracket pair ... 括号高亮配对提示
2 javascript(es6) code snippets 常用 js 代码片断
3 node-snippets 常用 node 代码片断
4 quokka.js js/es6 代码语法实时检查/执行器(续命法宝)
5 rest client 可不离开 vscode 环境进行 api 请求测试
6 eslint js 代码质量智能分析器
7 vetur vue 语法高亮,智能感知,emmet 等
8 vue3 snippets vue3 常用代码片断
9 vue-helper: vue-helper 在扩展中使用的 vue 提示,如 element ui

PHP常用

序号 名称 描述
1 php intelephense php 语法提示/自动补齐
2 php intellisense php 代码跟踪/重构/自动完成
3 php debug php 代码调试器
4 php docbloker php 生成块级注释
5 vscode-database vscode 数据库 SQL 支持插件

编程常用字体

字体名称 描述 支持连写
Fira Code 喜欢的真喜欢,讨厌的真讨厌 支持
JetBrains Mono JetBrains 出品,免费 支持

字体安装成功后,还需要在 vscode 中进行配置: settings.json

# 将Fira Code 字体放在第一个
"editor.fontFamily": "'Fira Code',Consoles, 'Courier New', monospace",

# 打开允许连写开关
"editor.fontLigatures": true,

本文来自:@PHP中文网公众号

一、单一类型

类型说明版本
类/接口名称值必须为指定类和接口的实例化对象 instanceof
self值必须是用于类型声明相同类的 instanceof 。 仅可在类中使用。
parent值必须是用于类型声明父级类的 instanceof , 仅可在类中使用。
array值必须为 array。
callable值必定是一个有效的 callable。 不能用于类属性的类型声明。
bool值必须为一个布尔值。
float值必须为一个浮点数字。
int值必须为一个整型数字。
string值必须为一个 string。
iterable值必须为 array 或 instanceof Traversable。PHP 7.1.0
object值必须为object。PHP 7.2.0
mixed值可以为任何类型。PHP 8.0.0

二、允许为空的(Nullable)类型

自 PHP 7.1.0 起,类型声明允许前置一个问号 (?) 用来声明这个值允许为指定类型,或者为 null。

三、复合类型

还可以组合简单类型为复合类型。 PHP 支持以下方式复合类型:

  1. 简单类型联合。PHP 8.0.0 起可用。
  2. class-type(接口、类名)类型交集。PHP 8.1.0 起可用。

四、仅仅返回类型

void 是一个返回类型,用于标识函数没有返回值。 它不能是联合类型的一部分。 PHP 7.1.0 起可用。

https://www.php.net/manual/zh/language.types.declarations.php

1.数据查询语言(DQL)

数据查询语言(Data Query Language, DQL)保留字SELECTFROMWHEREGROUP BYHAVINGORDER BY(查询操作)。

2.数据定义语言(DDL)

数据定义语言 (Data Definition Language, DDL) CREATEALTERDROP三个语法所组成(对表结构操作)。

3.数据操纵语言(DML)

数据操纵语言(Data Manipulation Language, DMLINSERTUPDATEDELETE三种指令为核心(对表内数据操作)。

4.数据控制语言(DCL)

数据控制语言 (Data Control Language) 由 GRANTREVOKE 两个指令组成(权限管理)。

5.指针控制语言(CCL)

它的语句,像DECLARE CURSORFETCH INTOUPDATE WHERE CURRENT用于对一个或多个表单独行的操作。

6.事务处理语言(TPL)

包括BEGIN TRANSACTIONCOMMITROLLBACK(事务控制)。

一般来说在Worker::runAll();调用前运行的代码都是在主进程运行的,onXXX回调运行的代码都属于子进程。注意写在Worker::runAll();后面的代码永远不会被执行。

use Workerman\Worker;
use Workerman\Connection\TcpConnection;
require_once __DIR__ . '/vendor/autoload.php';

// 运行在主进程
$tcp_worker = new Worker("tcp://0.0.0.0:2347");
// 赋值过程运行在主进程
$tcp_worker->onMessage = function(TcpConnection $connection, $data)
{
    // 这部分运行在子进程
    $connection->send('hello ' . $data);
};

Worker::runAll();

注意代码中的注释哦!

注意:
1、不要在主进程中初始化数据库、memcacheredis等连接资源,因为主进程初始化的连接可能会被子进程自动继承(尤其是使用单例的时候),所有进程都持有同一个连接,服务端通过这个连接返回的数据在多个进程上都可读,会导致数据错乱。同样的,如果任何一个进程关闭连接(例如daemon模式运行时主进程会退出导致连接关闭),都导致所有子进程的连接都被一起关闭,并发生不可预知的错误,例如mysql gone away 错误。

2、推荐在onWorkerStart里面初始化连接资源。

转自:http://www.workerman.net

报错完整信息为:

Deprecated: Method ReflectionParameter::getClass() is deprecated in /vendor/topthink/think-container/src/Container.php on line 450
Script @php think service:discover handling the post-autoload-dump event returned with error code 255

这是因为在PHP8.0以后反射类ReflectionParameter::getClass() 已弃用,变更为getType()
只要找到文件vendor/topthink/think-container/src/Container.php修改替换即可。
如下图:
QQ20220215-172931@2x.png

详情见:https://github.com/top-think/framework/commit/df4a07d2f51307a6fabdf75dc5b4b7f8b0ad8af8

1、在文件support/helper.php添加:

function env($key, $default = null)
{
    static $env_config = [];
    if (!$env_config) {
        $env_config = include base_path() . DIRECTORY_SEPARATOR . '.env.php';
    }
    return $env_config[$key] ?? $default;
}

2、在项目根目录添加.env.php

<?php

// config/app.php
$app = [
    'APP_NAME' => 'webman',
    'APP_ENV' => 'dev',
    'APP_DEBUG' => true,
];

// config/database.php
$mysql = [
    'DB_HOST' => '127.0.0.1',
    'DB_PORT' => 3306,
    'DB_USER' => 'root',
    'DB_PASSWORD' => 'root',
];

//合并数组
return array_merge($app, $mysql);

3、在config/database.php中改为:

return [
    // 默认数据库
    'default' => 'mysql',

    // 各种数据库配置
    'connections' => [
        'mysql' => [
            'driver' => 'mysql',
            'host' => env("DB_HOST", '127.0.0.1'),
            'port' => env("DB_PORT", 3306),
            'database' => 'test',
            'username' => env('DB_USER', 'root'),
            'password' => env('DB_PASSWORD', 'root'),
            'unix_socket' => '',
            'charset' => 'utf8mb4',
            'collation' => 'utf8mb4_unicode_ci',
            'prefix' => '',
            'strict' => true,
            'engine' => null,
        ],

注意:.env.php 不提交到版本库(.gitignore里加一行.env.php)。

本文转自:https://www.workerman.net/q/7564

<?php
function foo(){
    static $int = 0;          // correct
    static $int = 1+2;        // correct 
    static $int = sqrt(121);  // wrong  (as it is a function)

    $int++;
    echo $int;
}
?>

常量表达式的结果可以赋值给静态变量,但是动态表达式(比如函数调用)会导致解析错误。因为静态声明是在编译时解析的。