php中alight是什么意思,进阶PHP需要注意的一些点
最近写了一段时间PHP,发现了不少以前没有注意到或者意识到的事情,写一篇记录分享一下。PHP进阶一定要注意这些事情。
用好PECL
PECL(The PHP Extension Community Library),PHP官方提供的PHP扩展库。这个主要可以解决社区和第三方提供的PHP扩展的安装问题。早些年看张宴老师的PHP编译部署的文档,生产环境的PHP扩展安装从那时起都是从网站上下载,然后自己编译安装。后来PHP版本升级后,原来文档里面提供的扩展包已经不能匹配新版PHP环境了。其实PHP一直都有PECL这个工具用来管理第三方扩展,使用起来非常方便。
在Linux/Unix/MacOS上,使用PECL是一件非常方便的事情。如果你的PHP环境是自己编译的,在PHP的安装目录的bin下会有pecl这个文件,把它软链到/usr/bin下面你就可以随时使用pecl了。以下给出两种软链它的方案,Linux发行版推荐使用alternatives工具。
我的PHP安装在:/usr/local/php-5.5.10
alternatives安装方式
alternatives --install /usr/bin/pecl pecl /usr/local/php-5.5.10/bin/pecl 1000
soft link安装方式
ln -s /usr/local/php-5.5.10/bin/pecl /usr/bin/pecl
注意你可能需要管理员权限才能进行此操作。
在Windows上同样可以使用PECL,但是不如Linux/Unix系统上那么无痛。有相当多常用的扩展并不提供编译好的.dll,而且要在Windows上自己编译PHP扩展,现阶段来看,称其为一场灾难也不为过。要做到VC版本、x86/x64、线程安全/非线程安全版本的完全匹配,一个版本的扩展至少要产生8~12个版本的DLL。
使用PECL非常简单,常用的命令包括list、search、install、uninstall。
list命令可以帮你查看当前PHP环境已经安装的扩展:
[root@dev2 bin]# pecl list
Installed packages, channel pecl.php.net:
=========================================
Package Version State
memcache 2.2.7 stable
mongo 1.5.1 stable
redis 2.2.5 stable
search命令可以在软件仓库中查找需要的扩展软件包:
[root@dev2 bin]# pecl search mongo
Retrieving data...0%
Matched packages, channel pecl.php.net:
=======================================
Package Stable/(Latest) Local
mongo 1.5.1 (stable) 1.5.1 MongoDB database driver
如果你要安装mongo的扩展,那么直接执行:
pecl install mongo
即可搞定,多简单!
需要注意的一点是,PECL并不会替你修改php.ini文件,所以使用pecl安装扩展后,请编辑php.ini文件增加配置使扩展生效。
拥抱PHP 5.3+
貌似很多国内项目还在坚守PHP 5.2,老项目的迁移抛开不说,如果你正准备进行一个新的PHP项目,那么请将你的默认PHP版本升级到5.3.8以上,推荐直接升级到PHP 5.5。为什么要这样做?首先是更加完善的面向对象支持,PHP 5.3开始支持命名空间,这一特性对现在社区的库和扩展来说是一项最起码的要求。如果你还打算继续使用PHP 5.2甚至更老的版本,那么恭喜你只能望Composer兴叹了(下面会告诉你Composer是个多么令人惊奇的东西)。另外就是新版本的安全性和性能会更好。(PS吐槽:总有人认为老版本更稳定或者给更安全,美其名曰经历过实战检验——这群人的万能挡箭牌。呵呵。)
PHP 5.3开始支持命名空间,同时也由此诞生了psr规范(什么是PSR?传送门)。有了这一特性之后,我们终于有了普遍适用的类和文件加载机制,再也不用关心使用类之前是否require过,或者费心使用各种框架五花八门晦涩的组件加载方法了。
PHP 5.4开始支持了数组定义的缩略写法,以前我们定义一个数组通常是这样的:
$array = array('a', 'b', 'c');
大家用JS就会发现这种写法其实不够简洁,于是PHP5.4开始支持了类似JS的这种写法:
$array = ['a', 'key' => 'val', 'c'];
另外,PHP 5.4开始,支持了方法参数的强制类型定义(以前只支持array),这对提高代码的健壮性和IDE支持有了很大帮助:
function test(PDO $pdo) {
...
}
当然,一些特性不再必要,或者受支持,请参考:
在PHP 5.5中,有更多的新特性被支持,比如empty开始支持表达式了,新版本现在开始支持yield关键字了。如果你对.net比较熟悉,那这个对你来说一定不陌生。
当然,一些特性不再必要,或者受支持,请参考:
使用Composer
Composer绝对是一个令人眼前一亮的东西,它更像是PHP的Maven。现在一门编程语言,得社区者得天下。Java的广泛应用,功劳肯定离不开数以万计的社区项目支持。你要开发一个模块,还继续自己先造轮子吗?No,Composer已经为你提供了数以万计的轮子供你挑选,现在要做的,就仅仅是从一些漂亮的轮子里面挑选合适的放在你的项目里,而不是写一些未经严格测试的代码就作为系统的基础类库。
关于Composer的介绍,请参考我之前写的一篇文章:传送门
做一件事情,现在只需要往composer.json中添加一个合适的库依赖,然后使用composer update,这些天降神兵的家伙就加入到你的项目中了。我现在使用了这样几个组件,通过composer安装:
Doctrine ORM – 一个PHP的ORM框架,下面会讲到。
php-resque、php-resque-scheduler – 一个PHP的后台任务处理框架、计划任务框架。
phpexcel – 老牌PHP处理Excel的组件
image – 一个PHP的图像处理库
我要做的仅仅是写几行类似胶水的代码,把这些类库粘接起来。其他的事情全部交给开源社区了:-)。
别被框架绑架
不能不说,如今PHP开发不整一个框架,都不算会写PHP。有那么多框架可供选择:Zend、Symfony、Yii、CakePHP等等,但是千万记得别被框架绑架。这句话有两个方面的意思,首先,别让框架把简单事情复杂化。PHP论性能不如Java,论语法糖不如C#,论灵活性扩展性不如Python、Ruby这些家伙,那为什么还用PHP呢。我觉得仅仅是因为,KISS原则:Keep it simple, stupid. PHP要实现一个功能很简单,可能Java搭建框架的功夫,PHP就已经交付了这个功能。开发迅速,维护简单是他的优势,别让框架把它搞复杂了。其次,如果一个设计,框架不支持,或者做不到,不要想当然的以为PHP也做不到,这就错了。别忘了你有Composer:-)。但是如果一个框架不能够很好的支持社区组件,那么是时候把它扫进垃圾堆了。
Doctrine ORM
这家伙实在是不得不说它了。按照我以前的想法,PHP存在ORM这种东西完全是找虐。用过了Doctrine ORM才彻底改变了我的想法(其实不得不提的是之前做了接近一年的Java,JPA、Spring Data神马的已经开始依赖了)。
新的项目使用了我自己写的SimplePHP框架(传送门到GitHub)。但是业务领域还是有一些复杂的。为了便于以后的开发和维护,也为了团队协作更加方便(关于领域和数据访问层的设计,请参考《企业应用架构模式》这本书。),我决定尝试一种PHP的ORM框架。在Composer上找了一下,发现Doctrine ORM使用最多,果断尝试一下。刚刚读完入门指南,我就立即发现,这货完全就是PHP版本的JPA,连API都非常接近。
$entityManager = EntityManager::create($conn, $config);
$product = new Product();
$product->setName($newProductName);
$entityManager->persist($product);
$entityManager->flush();
SimplePHP可以很好地兼容PSR-0,所以直接通过Composer安装,简单配置一下即可:
Conf/db.conf:
/* Doctrine */
return ['doctrine' => array(
'metadata_type' => 'php',
'metadata_path' => array(APP_ROOT.DIRECTORY_SEPARATOR.'Entity'),
'dev_mode' => true,
'db_param' => array(
'driver' => 'pdo_mysql',
'host' => '127.0.0.1',
'user' => 'public',
'password' => 'public',
'dbname' => 'test',
'charset' => 'utf8'
),
)]
我写了一个简单的工厂类,来帮助从配置文件产生EntityManager对象,在业务逻辑类里面可以直接使用:
$em = EntityManagerFactory::getManager();
来取得EntityManager对象。
项目开发证明,Doctrine ORM非常必要,它带来很多方便的特性,重要的是,Doctrine ORM性能也还不错。
通过注解方式配置的POPO(对应POJO),可以直接从领域模型快速建出,并且无需关心数据库建表,这一切都会有Doctrine的Tools帮你建立。甚至代码有了修改之后,都能自动地更新数据库表结构,简直不能更爽了,哈哈(PS:其实JPA一直都可以好嘛)。
基本上要说的也就这几点了,作为一点点经验分享给大家。
php中alight是什么意思,进阶PHP需要注意的一些点相关推荐
- c语言字母存储,字符串在内存中的储存——C语言进阶
字符串在内存中的存储--C语言进阶 字符串是以ASCII字符NUL结尾的字符序列.ASCII字符NUL表示为\0.字符串通常存储在数组或者从堆上分配的内存中.不过,并非所有的字符数组都是字符串,字符数 ...
- 【SQL开发实战技巧】系列(十八):数据仓库中时间类型操作(进阶)INTERVAL、EXTRACT以及如何确定一年是否为闰年及周的计算
系列文章目录 [SQL开发实战技巧]系列(一):关于SQL不得不说的那些事 [SQL开发实战技巧]系列(二):简单单表查询 [SQL开发实战技巧]系列(三):SQL排序的那些事 [SQL开发实战技巧] ...
- 【SQL开发实战技巧】系列(十九):数据仓库中时间类型操作(进阶)如何一个SQL打印当月或一年的日历?如何确定某月内第一个和最后—个周内某天的日期?
系列文章目录 [SQL开发实战技巧]系列(一):关于SQL不得不说的那些事 [SQL开发实战技巧]系列(二):简单单表查询 [SQL开发实战技巧]系列(三):SQL排序的那些事 [SQL开发实战技巧] ...
- 【SQL开发实战技巧】系列(二十一):数据仓库中时间类型操作(进阶)识别重叠的日期范围,按指定10分钟时间间隔汇总数据
系列文章目录 [SQL开发实战技巧]系列(一):关于SQL不得不说的那些事 [SQL开发实战技巧]系列(二):简单单表查询 [SQL开发实战技巧]系列(三):SQL排序的那些事 [SQL开发实战技巧] ...
- 爬虫中之Requests 模块的进阶
requests进阶内容 session处理cookie proxies参数设置请求代理ip 基于线程池的数据爬取 引入 有些时候,我们在使用爬虫程序去爬取一些用户相关信息的数据(爬取张三" ...
- 三万文字透视前瞻:区块链及隐私计算在传统企业中的技术认知与进阶思考
作者 :招商局集团数字化中心 山金孝 声明:文章仅代表作者个人观点,与任何组织或公司无关 前言 区块链是一种分布式网络数据管理技术,其利用密码学和分布式共识协议保证网络传输与访问安全,并实现数据多 ...
- 在Horizon Workspace中配置Windows单点登录-进阶篇
在上一篇基础篇里面,简单介绍了在Horizon Workspace 1.8中如何配置Windows单点登录.在这篇博客中,会继续介绍一些针对大规模虚机或者虚拟桌面部署的配置方式.这些配置方式可以保证用 ...
- 字符串在内存中的存储——C语言进阶
字符串是以ASCII字符NUL结尾的字符序列. ASCII字符NUL表示为\0.字符串通常存储在数组或者从堆上分配的内存中.只是,并不是全部的字符数组都是字符串,字符数组可能没有NUL字符. 字符数组 ...
- 一文搞定JS中的DOM基础与进阶
文章目录: 1.DOM简介 2.获取元素 getElementByld() getElementsByTagName() getElementsByCl ...
- c 给定字符串中查找_【C进阶】练习题(一)
码字不易,对你有帮助 点赞/转发/关注 支持一下作者 微信搜公众号:不会编程的程序圆看更多干货,获取第一时间更新 1.打印杨辉三角 1 1 1 1 2 1 1 3 3 1 1 4 6 4 1 - 2. ...
最新文章
- C# WinForm中 让控件全屏显示的实现代码
- 研磨设计模式之 策略模式--转
- 摇杆控制方向原理_医用无油空压机的送料作用及工作原理
- Aop动态代理解决问题
- mysql主主备份_MySQL主从备份和主主备份配置+Keepalived+MySQL读写分离
- MySQL 十大常用字符串函数
- Nginx压测性能优化
- net执行oracle的存储过程
- Server.ScriptTimeOut,Response.IsClientConnected
- docker搭建upload-labs
- C程序设计--命令行参数(argc 和 argv[])
- 房源租赁签约管理系统、租房系统、退租、续租、换租、转租、房源管理、招租系统、租期账单、合同管理、营销推广、租客系统、业主系统、web原型、业务流程 、门禁系统、Axure原型、rp源文件
- 开源:全球软件产业四大发展趋势之一(转)
- Distiller 安装时环境配置的一些可选项
- 中外三大院士领衔:​INSEC WORLD世界信息安全大会即将开幕
- 文件内容中显示(SOH、STX、ETX)
- 【RDMA】基于RoCE v1配置PFC (非讲原理)
- 基于点击量的趋势分析python_【Python数据科学实战项目】之 基于MovieLens的影评趋势分析详解...
- 教师管理助手平台有哪些功能特别好,使其非常受学生们喜欢
- Aplication的作用