分类 PHP 下的文章

由 Phalcon Model 的 “bug” 引发的对 PHP Iterator 和 ArrayAccess 的探索

0x00 奇怪的现象

最近在写 Phalcon ORM 查询结果集遍历的时候发现 Phalcon ORM 有个很神奇的现象:当你用 foreach 遍历 Model->find() 之后的结果(Phalcon\Mvc\Model\Resultset\Simple),如果在遍历中有访问下一个($key + 1)元素,就会自动执行 next(),下一个元素就不会出现在 foreach 的下一次遍历中了...

举个例子,比如说我们有一张表 users,我们创建一个 User model,执行如下代码:

<?php

$users = \Models\User::find([
    'conditions' => 'role = 1'    // 这里可以是别的查询条件
]);

// 这里假设查询出来的记录只有两条,即 count($users) == 2

foreach ($users as $key => $user) {
    echo "key: $key, user_id: {$user->id}\n";
    // 假设这里因为业务逻辑的需要访问下一个 model
    $foo = $users[$key + 1];
}

你可能会觉得上面的循环在执行到第二次会报 PHP Notice: Undefined offset,但实际上,它什么也没报,只是安安静静地输出了:

- 阅读剩余部分 -

PHP 获取一个月后的日期

在 PHP 里,如果想获取下个月的今天,我们通常会用 strtotime('2019-01-13 +1 month') 或者是 strtotime('next month', strtotime('2019-01-13')),结果是 1549987200,用 date 转换成字符串就是 2019-02-13,so easy!

随着时间流逝,到了 2019-01-31 这一天,这代码似乎出问题了,居然得到的是 2019-03-03???

- 阅读剩余部分 -

多个 Laravel 项目共用 migrations

在实际开发中,我们可能经常会遇到一个项目会建立两个 Laravel 项目,一个是面向用户的 web/API,一个是管理员后台,这两个项目一般情况下是共用一个数据库的,那么我们的 migration 可以共用吗?该怎么操作?

在各项目里建各自 migration

我们先在 web/APIadmin 里都建各自的 migration

- 阅读剩余部分 -

Biu - 让你的邀请链接更好记

朋友经常会问我博客是用的哪的服务器,VPS 买的是哪家的,这时候我当然会发邀请链接啦(你好我好大家好嘛),可是邀请链接一般都很长而且没有什么规律,很难记,所以就写了这么一个东西,Biu,用来帮我缩短(某种意义上)和语义化我的邀请链接。

例如我的 DigitalOcean 邀请链接是 https://www.digitalocean.com/?refcode=b6df1e984dce ,用了 biu 之后就可以把它变成 https://yian.me/biu/digitalocean ,这样我随时都可以写出我的邀请链接了。

- 阅读剩余部分 -