0%

Introduction

I’m Huangdijia, a software engineer with a passion for open source. Active in the Hyperf ecosystem.

Member of @Hyperf, @FriendsOfHyperf

Your sponsorship means a lot to me. It will help me sustain my projects actively and make more of my ideas come true. Much appreciated! 💖 🙏

Sponsors

WeChatPay
Alipay

我最近看到一篇关于如何使 sudoTouch ID 一起工作的文章,这很好,但我的 iMac Pro 没有 Touch ID。我继续搜索并找到了pam-watchid

这是一个用于使用 WatchPAM模块 ——正是我想要的。

阅读全文 »

苹果系统(macOS、iOS)都已经全面支持暗黑模式(也叫深色模式)了,在这里不做过多的介绍了。在众多的技术文章里都有介绍如何使用,最常见的是通过 CSS 中的 prefers-color-scheme: dark 来检测用户是否开启了 Dark Mode,在 CSS里定义不同的样式。

阅读全文 »

期待已久的 PHP7.4 终于发布了,个人最期待的功能还是 Opcache Preloading

  • 为了预加载文件,您需要编写自定义PHP脚本
  • 此脚本在服务器启动时执行一次
  • 所有预加载的文件都可在内存中用于所有请求
  • 在重新启动服务器之前,对源文件所做的更改不会产生任何影响
阅读全文 »

烦恼从何而来

用 Laravel 的小伙伴应该都会用到 Queue, 从手册 Job 失败后会将队列信息记录到 failed_jobs 表,可以通过

1
2
php artisan queue:failed-table
php artisan migrate

作用主要是为了方便分析失败原因和 Job 重试(本身支持 retry),这都很好理解。当 failed_jobs 没有被创建的时候,会报这样一个异常:

1
SQLSTATE[42S02]: Base table or view not found: 1146 Table 'a8591.failed_jobs' doesn't exist

并且记录到 log 文件,如果你的项目中有异常通知,那是相当困扰。

但是有一个场景,也许我并不关心任务执行是否成功,或者说因为某种特定不可控因素允许任务存在执行失败的情况,而我又不希望被这类异常打扰要怎么办呢?

阅读全文 »

安装 illuminate/notifications

1
composer require illuminate/notifications

bootstrap/app.php 注册服务

1
$app->register(Illuminate\Notifications\NotificationServiceProvider::class);

⚠️ 必须在 AppServiceProvider 注册之前,不然自定义 Channel 会无法找到,提升 InvalidArgumentException with message 'Driver [xxxx] not supported.'

AppServiceProvider.php 注册 Channel

1
2
3
$this->app->make(Illuminate\Notifications\ChannelManager::class)->extend('your-channel', function() {
return $this->app->make(App\Channels\YourChannel::class);
});

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
class Foo
{
public function __call($name, $arguments)
{
echo 1;
}

public static function __callStatic($name, $arguments)
{
echo 2;
}

public function bar()
{
Foo::abc();
}
}

(new Foo)->bar();

结果是 1 还是 2?答案是 1

接下来解释一下:

  1. __call 方法关注方法能否被访问到,而不仅仅是关注是否存在
  2. __callStatic 方法关注的是方法能否被静态的访问到,而不是关注方法是否存在,是否是静态方法。
  3. 具体执行 __call__callStatic ,是根据调用的上下文。如