十年网站开发经验 + 多家企业客户 + 靠谱的建站团队
量身定制 + 运营维护+专业推广+无忧售后,网站问题一站解决
spl,指SPL - Standard PHP Library 标准PHP类库。
成都创新互联是一家专业提供温宿企业网站建设,专注与成都网站制作、做网站、H5高端网站建设、小程序制作等业务。10年已为温宿众多企业、政府机构等服务。创新互联专业网站建设公司优惠进行中。
不管是二次开发,还是自己全部重新设计,我们都得要有一个大前提,那就是最大化提高系统平台生命周期,国内很多phper开发者,很多项目的生命周期短得可怜,阅其代码坚酸难懂。接手的开发人员像被强奸的感觉,,合格的PHP程序员应把代码看成是一种艺术。
一个操作平台是否拥有良好的可扩展性,布局,可维护性是其根本的基础。其核心框架必需高度抽象化,有良好的命名空间与对象接口,,这样才能算是进入贵族艺术编程世界。
SPL(Standard PHP Library) IN PHP5
下一步中大型PHP商业应用的主流的开发将会是以OO,OA软件开发模式主领潮流,从PHP5到PHP6,google Trends足以证明这一点,过去传统的面向过程的开发模式将会被弃之,如果你是一位真正合格程序员。
你会发现OO所带来的好处是深远的,不仅是软件工程所带来的收益,而且此种思维理念对个人思维方式定有大的变革,你会发现你做事情开始方式无处不在。
当然笔者不想去论述用面向过程写PHP代码所带来的好处(如简单的应用),那种单人时代的开发方式如儿童时代已不适合需求复杂,变化过快的现代商业环境.笔者发现,如今支持面向过程的开发者大多知识不够全,够不够广,还不足以用OO来解决商业开发,当然这不是绝对。
但一位有着C++,JAVA, Smalltalk、EIFFEL等开发语言背景的程序员,他会无一不支持OO开发模式,相反网络知识框架基础较少,各种协议一知半解,只会PHP的开发人员他们会觉得面向过程最适合他们。
以上内容参考 百度百科-spl (标准PHP类库)
PHP库给开发者提供了一个标准接口 它帮助开发者在PHP里充分利用面向对象编程 这些库为特定类型的内置功能提供了一个标准的API 允许类可以与PHP引擎进行无缝的交互 此外 开发者使用这些类库还可以简化工作流程 提供工作效率
下面就一起来看看这些非常实用且免费的类库吧 希望它们能助你一臂之力
Requests
Requests是一个用PHP编写的HTTP库 遵循ISC开源协议 托管在GitHub上 Requests取代了Python HTTP/ 以外的一切工作———让你与Web服务可以无缝的结合
Requests提供了一致的API 并且使用cURL或fsockopen(具体取决于可用性) 它还简化了发送请求 接受HEAD GET POST PUT DELETE或PATCH并且添加标头 表单数据和多个部分组成的文件 其次 该库还适用于国际域名 身份验证 自动压缩gzip压缩响应等 综上所述可以看出 Requests是一个非常好用且可以友好托管HTTP请求的标签
Munee
Munee是一个集图片尺寸调整 CSS JS合并/压缩 缓存等功能于一身的PHP库 可以在服务器端和客户端缓存资源 它集成了PHP图片操作库Imagine来实现图片尺寸调整和剪切 之后进行缓存
Munee可以自动编译LESS SCSS和CoffeeScript 并且可以把CSS+JS文件合并成一个单一的请求 此外 还可以对这些CSS JS文件进行精缩 让其拥有更好的性能表现 该库还可以轻易地与任何代码集成
Ratchet
Ratchet是一个PHP库 WebSockets工具包 开发者可以使用它在客户端和服务器端之间构建实时 双向的App应用 并且可以快速简单地构建事件驱动应用程序(而不是传统的HTTP 请求/响应应用程序)
Swift Mailer
Swift Mailer是一个功能丰富的PHP邮件库 不依赖于PHP自带的mail() 函数 因为该函数在发送多个邮件时占用的系统资源很高 Swift直接与SMTP服务器通讯 具有非常高的发送速度和效率
Unirest
Unirest是一个轻量级的HTTP开发库 可用于PHP Ruby Python Java Objective C等开发语言 支持GET POST PUT UPDATE DELETE操作 它的调用方法与返回结果对所有开发语言来说 都是相同的
Detector
Detector是一个开源的PHP类库 用于检测用户的浏览器环境 它可以获得浏览器的使用情况和浏览器的HTML CSS 功能 并分析是否是移动 平板电脑 桌面或网页爬虫和其他项 如 颜色深度 视频尺寸 Cookie等 该库对每个浏览器用户都使用单一的用户代理字符串来自动适应新浏览器 版本和设备
PHP Thumb
PHP Thumb是一个PHP类 用来生成图片的缩略图 只需数行代码即可 支持多种图片来源 包括文件系统或者数据库 支持大多数图片格式 并可对图片进行旋转 剪切 加水印等等 可自定义缩略图的质量 提供内建的缓存以降低服务器的负载
Zebra Image
Zebra Image是一个开源的轻量级图像处理库 并且是一款面向对象库 只需PHP GD 扩展 并支持缩放 裁剪 旋转和翻转操作 它可以用于 jpg gif png等格式
Hybrid Auth
HybridAuth是一个开源PHP类库 用于通过微博/社交网站和ID来提供验证功能实现同步登录网站功能 它能够很方便的与现有网站相集成 只要引用一个文件并添加几行代码就能够实现登录 一旦验证 HybridAuth会提供连接用户的标准化相关资料 此外 除了验证功能 这个类库能够让我们与用户连接的social API客户端相交互
Gantt Charts
Gantti是一个开源的PHP类 帮助用户即时生成Gantt图表 使用Gantti创建图表无需使用JavaScript 是纯HTML CSS 图表默认输出非常漂亮 但用户可以自定义样式进行输出(SASS样式表)
Mobile Detect
Mobile Detect是一个PHP类 通过User Agent检测各种手机设备 并结合HTTP Header来检测移动设备环境 该类库最强大的地方是 它有一个非常完整的库 可以检测出所用的设备类型(包括操作类型 以及手机品牌等都能检测)和浏览器的详细信息
ImageWorkshop
顾名思义 ImageWorkshop是一个管理和操作图片的PHP类库 这个类拥有类似图片编辑软件的逻辑 基于层的概念 可以叠加很多层或层组(每一层不同的操纵选项) 它还支持许多功能 比如水印 裁剪 移动 缩放 旋转 叠加等
JqmPhp
JqmPhp是一个PHP开源类库 旨在简化jQuery与PHP来进行移动开发 用于生成使用jQuery Mobile框架所需要的HTML文件 该类库的文件是独立的 所以你可以根据需要来选择使用
PHP Image Cache
Image Cache是一个轻量级的PHP类 可以在用户浏览器里压缩 移动 缓存图片 这个类提供一些简单的设置如 目录 根路径URL等 然后针对每一张图片调用压缩功能
Imagine
Imagine是一个面向对象的PHP类库 用于图片操作 这个类库能够处理一些经常用到的操作如 缩放 裁剪 应用过滤等 其Color类库可用于对任意特定的颜色生成RGB值 并且还提供一些方法来绘制图形如 圆弧 椭圆 线 片等
lishixinzhi/Article/program/PHP/201404/30630
jpgraph的安装与配置
Jpgraph这个强大的绘图组件能根据用户的需要绘制任意图形。只需要提供数据,就能自动调用绘图函数的过程,把处理的数据输入自动绘制。Jpgraph提供了多种创建各种统计图,包括折线图、柱形图和饼形图等。Jpgraph是一个完全使用php语言编写的类库,并可以应用任何php环境中。
1、jpgraph的安装
Jpgraph可以从其官方网站下载。注意:jpgraph支持php4.3.1以上和PHP5两种版本的图形库,选择合适的jpgraph下载。可以下载这样的版本使用:jpgraph-2.3
其安装步骤非常简单:
a) 将压缩包下的全部文件解压到一个文件夹中。如f:\appserv\www\jpgraph
b) 打开PHP的安装目录,编辑php.ini文件并修改其中的include_path参数,在其后增加前面的文件夹名,include_path=”.;f:\appserv\www\jpgraph”
c) 重新启动apache服务器即可生效。
2、jpgraph的配置
Jpgraph提供了一个专门用于配置jpgraph类库的文件jpg-config.inc.php在使用jpgraph前,可以通过修改文本文件来完成jpgraph的配置。
jpg-config.inc.php文件的配置需要修改以下两项:
a) 支持中文的配置
Jpgraph支持的中文标准字体可以通过修改chinese_ttf_font的设置来完成。
Define(‘chinese_ttf_font’,’bkai00mp.ttf’);
b) 默认图片格式的配置
根据当前PHP环境中支持的图片格式来设置默认的生成图片的格式。Jpgraph默认图片格式的配置可以通过修改DEFAULT_GFORMAT的设置来完成。默认值auto表示jpgraph将依次按照png,gif和jpeg的顺序来检索系统支持的图片格式。
DEFINE(“DEFAULT_GFORMAT”,”auto”);
注意:如果用户使用的为jpgraph2.3版本,那么不需要重新进行配置。
此类库简单、易用,便于你自己修改和对功能的改善,能解决大部分
PHP
项目中执行的
SQL
操作。
初步工作
首先,请大家下载这个类库
M.class.php 再下载一个
Mysqli
连接数据库的类库
MysqliDb.class.php(打包下载地址)
新建一个
includes
的文件夹,将下载下来的两个
class
文件,放进去。
然后,请你在项目下创建一个
test.php
文件。注:UTF-8
文件格式
请先根据你机器的情况,填充以下代码,用于连接数据库:
复制代码
代码如下:
header('Content-Type:text/html;Charset=utf-8');
define('ROOT_PATH',
dirname(__FILE__));
define('DB_HOST',
'localhost');
//数据库服务器地址
define('DB_USER',
'root');
//数据库用户名
define('DB_PWD',
'×××');//数据库密码
define('DB_NAME',
'×××');
//数据库名称
define('DB_PORT',
'3306');
//数据库端口
function
__autoload($className)
{
require_once
ROOT_PATH
.
'/includes/'.
ucfirst($className)
.'.class.php';
//自动加载
class
文件
}
好了,上面的这些操作都是初步工作,下面正式进入类库的讲解。
类库讲解
首先,我们得实例化
M.class.php,实例化很简单:
复制代码
代码如下:
$m
=
new
M();
//这步操作代表
M.class.php
中的所有功能都封装在了变量
$m
中
注:
1、M类库中的方法参数说明,请到
M.class.php
文件中看详细的注释,这里不再进行叙述。建议在学习的时候,对照着看下文件中的参数即注释。
2、讲解代码中用到的数据库结构为:
复制代码
代码如下:
CREATE
TABLE
`user`
(
`id`
int(8)
unsigned
NOT
NULL
auto_increment,
`name`
varchar(50)
default
NULL,
`email`
varchar(100)
default
NULL,
`age`
smallint(3)
default
NULL,
`class_id`
int(8)
default
NULL,
`commit_time`
int(10)
default
NULL,
PRIMARY
KEY
(`id`),
KEY
`name`
(`name`)
)
ENGINE=MyISAM
DEFAULT
CHARSET=utf8
复制代码
代码如下:
CREATE
TABLE
`class`
(
`class_id`
int(8)
NOT
NULL
auto_increment,
`class_name`
varchar(100)
default
NULL,
PRIMARY
KEY
(`class_id`)
)
ENGINE=InnoDB
DEFAULT
CHARSET=utf8
并添加一条测试数据。
3、M类库中,大部分方法都分两中类型,即:SQL方法;拼接方法,具体在实例中可以看出
4、以下称述中的
M
为
M.class.php
文件
方法1、Insert()
添加数据
Insert
方法的全部使用案例如下:
复制代码
代码如下:
$m-Insert("user",
null,
array('焦焦',
'liruxing1715@sina点抗 ',
'23',
time()));
//
拼接方法:往`user`表中添加一条数据,返回值为数据库影响的行数
$m-Insert("user",
null,
array('焦焦',
'liruxing1715@sina点抗 ',
'23',
time()),
true);
//
功能同上,返回
last_insert_id(插入的增长id)
$m-Insert("INSERT
INTO
`user`
(`name`,
`email`,
`age`,
`commit_time`)
VALUES
('张小花',
'zhangxiaohua@sina点抗 点吸烟 ',
'22',
'".time()."')");
//SQL方法,返回值为数据库影响的行数
$m-Insert("INSERT
INTO
`user`
(`name`,
`email`,
`age`,
`commit_time`)
VALUES
('张小花',
'zhangxiaohua@sina点抗 点吸烟 ',
'22',
'".time()."')",
true);
//
同上,返回
last_insert_id
注:Insert
方法中的第二个参数若为null,可自动获得插入表除
auto_increment
字段之外的所有字段,详情请看M源文件;若要返回值为最后插入的
ID,那么请设置
Insert
方法的最后一个参数为
true(默认是false);
方法2、Update()
修改数据
update
方法的全部使用案例如下:
复制代码
代码如下:
$m-Update("user",
array('name'='李茹茹',
'age'=24),
"id=1");
//拼接方法,修改id为1的数据的名称为“李茹茹”;年龄为“24”,其方法的返回值为受影响的行数
$m-Update("UPDATE
`user`
SET
`name`='李茹茹',
`age`=24
WHERE
id
=
1");
//SQL
用法,功能同上
方法3、Del()
删除数据
Del
方法的全部使用案例如下:
复制代码
代码如下:
$m-Del('user',
'id=3');
//拼接方法:删除`user`表中
id
为3的数据,返回受影响的行数
$m-Del("DELETE
FROM
`user`
WHERE
id=4");
//SQL方法:删除`user`表中
id
为4的数据,返回受影响的行数
$m-Del("DELETE
FROM
`user`
WHERE
id
in
(10,
11,
12)");
//SQL方法:删除多条数据,删除`user`表中
id
为
10、11、12
的数据,返回受影响的行数
方法4、Total()
获取记录数,返回值都为int
Del
方法的全部使用案例如下:
复制代码
代码如下:
$m-Total('user');
//拼接方法:返回
`user`表中的记录数,无条件
$m-Total('user',
'id1');
//拼接方法:返回
`user`表中
id
大于1的记录数,有条件
$m-Total("SELECT
COUNT(*)
AS
total
FROM
`user`");
//SQL方法,注:使用SQL方法,语句中必须使用
"AS
total",否则会报错
方法5、IsExists()
检查数据是否存在,返回值为boolean
复制代码
代码如下:
$m-IsExists('user',
"`name`='焦焦'");
//拼接方法:返回`user`表中是否存在`name`为“焦焦”的数据,返回true,若不存在,返回false
方法6、InsertId()
获取表下一个添加的自动增长id,注意,这里不进行添加操作,只是获取下一个增长id
复制代码
代码如下:
echo
$m-InsertId('user');
//获取`user`
表下一个添加的自动增长id
方法7、GetRow()
返回单条数据,返回值为一维数组
GetRow
方法的全部使用案例如下:
复制代码
代码如下:
$data
=
$m-GetRow("SELECT
`name`,email
FROM
`user`
WHERE
id=1");
//SQL方法,返回一维数组,例如:Array
(
[name]
=
焦焦
[email]
=
liruxing1715@sina点抗
)
$data
=
$m-GetRow("SELECT
u.`name`,
u.email,
c.class_name
FROM
`user`
u,
`class`
c
WHERE
u.class_id=c.class_id
AND
u.id=1");
//SQL方法,多表查询
$data
=
$m-GetRow('user',
'`name`,email',
"id=1");
//拼接方法
$data
=
$m-GetRow('user
as
u,`class`
c',
'u.`name`,u.email,c.class_name',
"u.id=1
AND
u.class_id=c.class_id");
//拼接方法,多表查询
$data
=
$m-GetRow("SELECT
`name`,email
FROM
`user`");
//如果没有指定条件应该是显示全部信息,但是在此方法中将默认显示第一条(不推荐这么使用!!!)
$data
是查询出来的一维数组。
方法8、GetOne()
返回单个数据
GetOne
方法的全部使用案例如下:
复制代码
代码如下:
$name
=
$m-GetOne("SELECT
`name`
FROM
`user`
WHERE
id=1");
//SQL方法,返回一个字符串,例如:焦焦
$name
=
$m-GetOne("user",
"name",
"id=1");
//拼接方法,返回一个字符串,例如:焦焦
方法9、FetchAll()
返回所有记录
复制代码
代码如下:
$data
=
$m-FetchAll("user");
//返回`user`表中的所有记录,以二维数组的形式
$data
=
$m-FetchAll("SELECT
*
FROM
`user`");
//SQL
方法,功能和返回值同上
$data
=
$m-FetchAll("user",
"name,email",
"id1",
'id
DESC',
'2');
//返回两条id1的数据,只显示name,email,并且以id
为倒序排序。注:请注意该方法的最后一个参数也可以为'0,2',目的是为分页准备的,如果第一页为'0,2'的话,那么第二页就是'2,2'
//该方法也支持联表查询和多表查询,下面以联表查询为例
$data
=
$m-FetchAll("`user`
as
u
LEFT
JOIN
`class`
as
c
ON
u.class_id=c.class_id",
"u.`name`,u.email,
c.class_name",
"u.id=1");
//注意:该拼接方法中,ON
添加的位置
注:对于该
FetchAll
方法,后续我会写一篇使用该方法进行完美分页的文章!!请关注。
方法10、MultiQuery()
执行多条SQL语句
复制代码
代码如下:
$sql
=
"INSERT
INTO
user
(`name`,email,
age,
class_id,
commit_time)
VALUES
('贾花花',
'jiahuahua@sina点抗 点吸烟 ',
'22',
'1',
'".time()."')";
//添加一个名叫“贾花花”的学生信息
$sql
.=
";DELETE
FROM
`user`
WHERE
`name`='焦焦'";
//删除一条名叫“焦焦”的学生信息
//解释:$sql
是多条
SQL
以英文;(分号)拼接起来的
$data
=
$m-MultiQuery($sql);
//返回为true,代表执行成功;为false,代表执行失败
类库讲解完毕
到此该类库的全部功能就讲解完毕,希望你能多看看M文件,了解其内部运行的机制。M
文件不会存在执行缓慢情况,请大家放心使用。
如果在使用过程中出现
SQL
拼接错误,类库会报出友善的错误提示。
有问题请留言,欢迎大家的批评和建议,加油!学习好运。