首页 > W3C Lab > PHP > PHP中的类型转换与数组
2016
08-07

PHP中的类型转换与数组

Pre


一开始学习编程时,我认为弱类型语言是非常好的,因为你从来不必操心:

  • 声明的变量时要写什么类型
  • 在传递或是使用时也不会因为类型不合要求而报错

 

然而人总是要学会长大,工作中的情况是完全不同的,没人 Care 你的 Div 飞的有多酷炫,处理业务逻辑与快速交付产品才是重点:

  • 严谨的处理变量的传递,防止类型错误导致各种神奇的 Bug
  • 优雅的反馈错误信息,而不是简单粗爆的中断程序的运行
  • 提高代码可维护性,不能再一味地追求缩减代码

 

现在我写 Js 时总会想起 《阿甘正传》中的那句话:

 

Laravel 的工匠情怀


本来妄图用 “视觉洁癖” 的设计修养弥补我在前端代码逻辑上的不足,并梦想成为 Lea Verou 与 John Resig 一样的 CSS海盗 与 JS忍者 ,他俩加起来大我10岁,我想我可能还有10年的时间来学习,然而天不遂人,我才刚看了半月的 《 CSS 揭秘 》与 《 JS 忍者秘籍 》,工作任务就变成了写后台。

好吧,“PHP——世界上最好的同时也是最坏的语言” ,我又回来了,还好之前写过个图书查询,有一点点的基础,当安装好的Laravel的一瞬间,我第一次知道了什么叫框架:

上吧,成为 PHP 艺术家!

然而第一条路由就吓得我坐在了地上,可能因为我太年轻,代码写的少,也没学过 ThinkPHP 和 Yii,不知道其他框架中怎么定义路由,是不是我打开的方式不对?这个怎么看起来像是 Express 呢,” :: ” 是什么东西,之前写 PHP 从来没用过(其实《 PHP 与 MySQL 开发》一书中有看过),PHP 支持能把函数当参数了 ?这到底是回调还是闭包?究竟是人性的堕落,还是道德的沦丧?

带着种种疑问,我陷入大波沉思,审视着熟悉又陌生的 PHP,是时候开始重新学习这门语言了。

 

PHP 中的转型与数组


说来一点也不惭愧,我没有深入学过任何一种强类型语言,虽然刚刚本宝宝有点受惊,但慢慢学会了用 Laravel ,有一种被救赎的感觉。真的很难写出像 Js 一样乱七八糟的代码,终于理解了为什么那么多人不喜欢 Js 。时刻脑补作用域与闭包,考虑 this tmd 绑定给了谁 ,真是一件让人心累的事。

现在我的工作就只有前端 CMS 页面,后端 MVC ,还有要给 iOS 客户端写 api 。说好的只有,为什么这么多?我只想做个单纯不做作的小前端而已,为什么要和外面那些娇艳贱货一样的做这么多事情?

但框架也有学习成本的,有些应急需求一时想不出什么好办法,还是要用那些蹩脚的原生函数。进而就发现一个问题,整容整得再像网红,Laravel 也改不了 PHP 是个 Lj 语言的事实。如果在以前,早敬而远之了,在我回想了会议上领导有关严惩项目拖延并加大罚扣薪资力度的发言,冷静地分析了当前局势后,我决定谨遵 Kyle Simpson 的指示:

某人曾对我表示他十分讨厌 Js,主要原因是 Js 中的数组居然不声明长度就可以插入索引值,我说这有什么好奇怪的,Js 中数组就是对象,为什么不能插呢?这世上冲突的起因大多都是因为用人们喜欢用自己的眼光去解释别人的世界。

前后端的交互中后端的工作其实大部分时间都在做这两件事

  1. 查询数据库 -> 处理数据 -> 发送数据
  2. 接收数据 -> 处理数据 -> 存入数据库

显然处理数据是主要的工作,因为数据库中的数据与接收发送数据的格式不一样,总是要处理数据类型之前的转换,而我就是带着 Js 的世界观去使用 PHP ,因此我马上就遇到了第一个冲突——转型。首先我会用 Laravel 从 数据库中查找相应的数据,用 Eloquent Model 查找返回的应该是一个叫 Colleciton 类的实例对象。以前我写 PHP 时,通常是用数组来伪造一个对象,然后再用 json_encode 函数处理,发送出数据。

然而 Laravel 有个好处,就是可以在 Controller 里直接返回 数组,(我猜)他会自动地调用 json_encode 之类的方法,把数组转成 JSON 发送出去。

虽然很方便,但是 PHP 中的数组毕竟不是对象,不能想插就插,当你想新加一对 Key/ Value 时,只能用这样

而这样就是不对的

很明显,我们不能对一个非对象赋值,然而对一个使用 Js 的人来说,总是想用对象来保存数据,能用字面量声明对象,在 PHP 看来好像行不通,那就打构造函数的主意好了,我尝试了一下 stdClass 这个

好像并不能传入个数组然后构造一个对象….于是我就找其他的方法,才知道原来 PHP 中的转型操作符可以很简单的完成这个工作

这样就可以了,其实 PHP 中的转型操作符很多 (int) (bool) (string) 这些,原来对象也可以这么转。


第二个问题就是数组拼接的问题,php 中可以使用 4 种方式处理数组的拼接,其工作方式也是各不相同

一开始我是拒绝的,这几种方法都能用来合并数组,然而看起来都不一样,那么究竟什么情况下要用哪一种呢?

 

 

最后编辑:
作者:scplay
这个作者貌似有点懒,什么都没有留下。

留下一个回复

你的email不会被公开。