forecho 的独立博客

把生命浪费在美好的事物上

PHP 中的动态属性和 StdClass

2015年11月08日

翻译 Dynamic Properties in PHP and StdClass

JavaScript 和 Python 允许对象实例的动态属性。事实证明,PHP 也是如此。看官方 PHP 对象和类文档可能会导致你相信动态实例属性需要自定义 __get 和 __set 魔术方法。其实不用。

简单,内置的动态属性

看看以下代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
class DynamicProperties { }
$object = new DynamicProperties;
echo isset($object->foo) ? 't' : 'f'; // f
echo PHP_EOL;
// Set Dynamic Properties foo and fooz
$object->foo = 'bar';
$object->fooz = 'baz';
// Isset and Unset work
isset($object->foo); // true
unset($object->foo);
// Iterate through Properties and Values
foreach($object as $property => $value)  {
    echo $property . ' = ' . $value . PHP_EOL;
}
// Prints:
// fooz = baz

25岁之后

2015年09月13日

现在是2015年9月13号17点53分54秒,是我迈向26岁之后的第三天了。过生日的方式是请了几个好朋友吃饭,大家一起聊聊天,女朋友送了我礼物,很是开心。

2011年11月8号的时候我在知乎回答了一个问题,26 岁的时候你正在做什么?想要做什么?由于当时只有21岁,所以我写下了下面这个希望:

我现在21岁了,还没毕业,大三没读了,暑假出来实习就没回去上课了,一直到现在。 所在的公司呢?是个创业型的小公司,刚开始干着挺有激情的,现在感觉有点累了,不过,还是要挺住,多学习一点东西。 26岁的时候,我希望能有着一群朋友,然后我们组成一个团队,有着一个共同的梦想,那时候的我们正在为之而奋斗,像《海贼王》中的路飞他们团队。 26岁的时候,我希望我希望我的父母、弟弟、爷爷、以及身边的亲人、朋友身体都很健康。 26岁的时候,我希望我也能做出一个百万级用户的互联网产品出来,至于做什么,我现在都还在想。 26岁的时候,我希望我已经找到了一个能懂我的女生。 26岁的时候,我想我已经创业了。 26岁的时候。。。。

那么现在我已经26岁了。时间过的真的很快啊,离这个回答都4年过去了,我来深圳也3年多了。那时候的我是在第一家公司,而现在的我都不知道换了几家了,但是现在的这家公司我待了快2年了,我自己都不敢相信自己能在一个公司待上这么久。

关于健身

2015年09月04日

前言

意识到我们这行职业天天坐办公室,再加上自己身体平常也比较虚,平常也比较懒,不爱运动。

一直有在关注跑步的事情,一天突然知乎上看了很多关于跑步的事情,整个人就跟打了鸡血一样,然后决定去跑步,拉上兔子一起。

开跑

啥废话也别说,先跑起来再说。一个周日我们早早吃完晚饭就去附近一站远的体育场跑步去了。刚开始跑第一圈就有点累,然后就开始走了,总之那天我们基本上是走一圈跑一圈的状态,跑了三圈,一圈600-700米左右吧。

感觉还是个很不错的开头的。一开始是打算每天去跑的,但是想想难度有点大,然后确定了每周2、4、7去跑。

确定之后就开始买了「装备」了,买了运动短裤和手机的肩带,后来又买了运动蓝牙耳机。

「跑步日」那天下班之后我们会现在公司那边先吃饭,然后再坐地铁回家,提前一站 - 也就是体育场下车,体育场旁边正好有一个沃尔玛,方便了我们存包。

刚开始我们还去换运动短裤,后来就懒得换了,再后来也懒得去跑了……

坚持了半个月左右吧。放弃是因为兔子来大姨妈了,我一个人也不想跑了。其实我每次去跑之前都有点想放弃,但是不敢也不想说,但是每次跑完之后感觉还是很好的。跑步之后大汗淋漓的感觉很舒畅!

感觉有些事情你一旦放弃了,后面就很难坚持了,哪怕就放弃了一天。当然我们还会去跑的!

解决「vagrant Up」timeout 问题

2015年07月30日

前言

之前我有写《Windows 开发利器》文章提到使用「VirtualBox + Vagrant(打造 Linux 开发环境)」, 到现在为止在公司使用也有几个月了,到现在为只出现过两次问题。

第一次启动不了

第一次主要是我电脑下班之后没关机,睡眠模式,结果半夜停电了,导致强制关机了,最后导致 vagrant up 命令启动不了了,最后我又重新安装了我的 vagrant。 所以,切记,一定要学会打包自己的 vagrant

打包自己的 vagrant

1
2
3
4
5
6
$ vagrant package
[default] Attempting graceful shutdown of VM...
[default] Clearing any previously set forwarded ports...
[default] Creating temporary directory for export...
[default] Exporting VM...
[default] Compressing package to: /Users/astaxie/vagrant/package.box

有了这个备份就是可以放心的使(zhe)用(teng)vagrant 了。

下面我们重点来讲讲今天遇到的这个坑。

Yii2 高级版新建一个 Api 应用

2015年07月27日

先在项目的根目录下复制一份 backend 为 api:

1
cp backend/ api -r

拷贝 api 环境

1
2
cp -a environments/dev/frontend environments/dev/api
cp -a environments/prod/frontend environments/prod/api

修改 environments/index.php 文件之后的代码(主要是添加了一些 api 相关的代码):

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
return [
    'Development' => [
        'path' => 'dev',
        'setWritable' => [
            'backend/runtime',
            'backend/web/assets',
            'frontend/runtime',
            'frontend/web/assets',
            'api/runtime',
            'api/web/assets',
        ],
        'setExecutable' => [
            'yii',
        ],
        'setCookieValidationKey' => [
            'backend/config/main-local.php',
            'frontend/config/main-local.php',
            'api/config/main-local.php',
        ],
    ],
    'Production' => [
        'path' => 'prod',
        'setWritable' => [
            'backend/runtime',
            'backend/web/assets',
            'frontend/runtime',
            'frontend/web/assets',
            'api/runtime',
            'api/web/assets',
        ],
        'setExecutable' => [
            'yii',
        ],
        'setCookieValidationKey' => [
            'backend/config/main-local.php',
            'frontend/config/main-local.php',
            'api/config/main-local.php',
        ],
    ],
];

Mac 安装 Docker

2015年07月26日

前言

前几天 MacBook 拿去修了,回来时候貌似覆盖的方式重装了一回系统了。反正就是 Apache 环境都没了,索性借这次机会使用一下 Docker 吧。

安装

根据官网的文档安装 Docker,如果一切正常的话就是下载一个软件,双击傻瓜式的安装就可以了。

下载太慢怎么办?

刚才找到一个国内的镜像,速度还不错,推荐。

安装失败报错怎么办?

1
2
3
> docker run hello-world
> FATA[0000] Post http:///var/run/docker.sock/v1.18/containers/create: dial unix /var/run/docker.sock: no such file or directory. Are you trying to connect to a TLS-enabled daemon without TLS?
  FAIL

Octopress 结合 Github 和 Travis-ci 实现自动更新博客

2015年07月21日

前言

这么久没更新博客了,一是因为 Octopress 虽然在自己的 MacBook 搭建起来了,但是工作电脑还没有,最主要的是工作电脑是 Windows 原来安装 Octopress 本身就是一件蛋疼的事情。对于一个懒人的我来说,一直想找一个自动生成静态博客并且会自动发布的解决方案,差点都准备放弃 Octopress 了,直到今天上午这种方案被我找到,本来以为最多一上午能搞定,没想到花费了我一天时间。

实现

主要是利用 travis-ci 提供的持续集成服务实现的,主要分三步就搞定:

  1. 用 github 登录Travis-CI,然后开启你要使用集成服务的项目。
  2. 添加 .travis.yml 文件(octopress 默认就有这个文件,我们修改就可以了)。
  3. 只要配置通过,当你 git push 的时候就会自动触发 travis-ci,后面的工作就全自动了。

Yii2 如何实现 RESTful?

2015年03月22日

什么是REST

简单的说,REST 指的是一组架构约束条件和原则。满足这些约束条件和原则的应用程序或设计就是 RESTful。

为什么要Restful?

主要遵循两个准则:

  • 不要为了RESTful而RESTful
  • 在能表达清楚的情况下,简单就是美

Yii2 使用 RESTful?

其实 Yii2 框架本身就对 RESTful 是友好支持的,具体可以看官方文档,或者去看源码,都是可以的。

下面分享我写的Yii2 RESTful DEMO

具体实现可以看我的代码,有不懂的可以留言。下面我重点说一下值得注意的地方:

2014年终总结

2015年03月02日

前言

2014年过的很快,快到我还没来得及接受2015年的到来;同时2014年过的又很慢,慢到我都忘记了那一年我都做了写什么。

生活

2014年算是微信年吧,也注定是微商年。你朋友圈肯定会有那么几个同学或者同事在卖面膜的。反正我受不了,都屏蔽了。呵呵。

2014年也刷新了我在一家公司待最长时间的记录了 - 到现在快一年半了。

3月底的时候我们终于面试到了一个前端工程师,从此把我从前端的坑解救出来了,并且还是个妹子。

4月份的时候公司组织了一次去厦门春游的活动,有机会让我们相互了解,是她现在成为我女朋友的条件。其实还是很感谢公司的。

后来的大部分时间都是去约会了,业余时间都没怎么写代码了。但是经常出去走走有何尝不是见好事。我们一起去过深圳湾、华侨城创意园、深圳图书馆、长沙的芒果TV等等。

2015年我们还去了一次东部华侨城。

2014年搬了一次家,三个好基友也分开住了。

2014年只参加过两次业内活动,但是还不够。

工作

刚过完年项目的主程就要离职了,突然感觉到自己的压力比较大,后来调试微信支付的时候差点崩贵了。

来来去去的人。这一年加班倒是没有2013年那么狠了,但是项目急着上线的时候还是天天加班。

自我感觉这一年自己的增长是缓慢的,更加熟悉CakePHP,更加理解了OOP的思想,但是我认为这点成长是不够的。

不想再继续写着一些CRUD的操作了,做长了无法就是更加熟悉使用而已,所以趁着2014年年底公司结构的变化,申请加入了平台基础组。我想接触一些大数据的处理,想接触一些架构方面事情。

我们说服了老大使用 Yii2 框架开发,让我能看到了希望,以后可以愉快的写代码了。