PHP框架认识初步
PHP框架比較
CodeIgniter
Codeigniter 相当轻量级。下载下来就能用, CI 的最大特点就是可扩展性非常强 你能够通过不改动源代码的方式 优雅的扩展差点儿全部的东西。
thinkphp
官方文档比較全
国产的
yii
英文好点的推荐yii
Laravel
Laravel是PHP 5.3之后开发的新框架,充分使用了PHP 5.3之后的新特性,不像非常多老牌框架有一大堆历史包袱。
Codeigniter 的文档相当丰富,Laravel 4 的资料不多。
Laravel 4 须要用 composer 下载安装各种第三方依赖库。在国内下载网速非常慢。
Codeigniter 兼容 PHP 5.2。Laravel 4 要求 PHP 5.3.7 以上。
总结
CI的设计比較老套,且还有历史包袱
Laravel由于是后来者,设计上更先进一些
CodeIgniter笔记
CodeIgniter
CodeIgniter 是一个简单高速的PHP MVC框架。
CodeIgniter 是一套给 PHP 站点开发人员使用的应用程序开发框架和工具包。它提供一套丰富的标准库以及简单的接口和逻辑结构,其目的是使开发人员更高速地进行项目开发。使用 CodeIgniter能够降低代码的编写量,并将你的精力投入到项目的创造性开发上。
简单高速。这也是选择CI的原因。
下面内容细节能够从CI官方文档寻找
超级对象this
当前的控制器对象,this。提供了非常多属性
载入方法
1 |
$this->load-> |
装载器类的实例system/core/Loader.php
提供的方法:
- view() 装载视图
- vars() 分配变量到视图
- database() 装载数据库操作
- model() 装载模型对象
- helper()
var_dump
1 |
void var_dump ( mixed $expression [, mixed $... ] ) |
此函数显示关于一个或多个表达式的结构信息。包含表达式的类型与值。
数组将递归展开值。通过缩进显示其结构。
$this->input 输入类
作用:默认帮助进行安全处理
CI_Input类 system/cor/Input.php
$this->input->server('DOCUMENT_ROOT')
相当于$_POST['DOCUMENT_ROOT']
$this->input->post('表单提交的name')
URL相关函数
- site_url
在form表单中提交action不能把路径写死,使用site_url (controller/action)
- base_url 根文件夹
请求图片时,<img src="<?php echo base_url()?
>uploads/jh.jpg">
- 自己主动载入URL函数,autoload.php
$autoload[‘helper’] = array(‘url’);
路由
config/routes.php
默认的控制器
1 |
$route['default_controller']= |
伪静态页面,不再显示xxx.php
,在路由中写一个正則表達式
1 |
$route['show/([\d]+)\.html']='article/show/' |
分页
使用分页类pagination
载入类文件
1 |
$this->load->library('pagnination'); |
配置
1 |
$config['per_page']=10;//每页显示10条数据 |
其它配置见文档
初始化
1 |
$this->pagination->initialize($config) |
创建链接
1 |
$this->pagination->create_links($config) |
跳过多少条
sql语句 select from limit+跳过的条数
定制分页器
$config[‘first_link’]=”首页”
其它配置见文档
文件上传
表单
<form enctype="multipart/form-data"></form>
使用文件上传类
1 |
$this->load->library('') |
配置
见文档
上传
1 |
$this->upload->do_upload('pic') |
返回信息
文件上传的一些数据
1 |
$his->upload->data() |
session
CI中的session 默认不使用php的原生session,放在cookie中(大小限制4k),不太好使用
1 |
$this->session->set_userdata('user',$user) ; //使用键值对来存储数据 |
由于是存储在cookie中的,所以不能在当前的函数中获取到session中的数据。须要跳转的别的页面后才干够获取的到
加密
生成随机不反复的字符串作为加密用的key,保存到config.php
1 |
$['encryption_key']="key的值" |
或者不使用CI的session,囧。
。。
表单验证
使用表单验证类
$this->load->library(‘form_validation’);
验证
1 |
$this->form_validation->set_rules('','',''); |
前台验证使用js,后台验证使用表单验证类
输出错误
form_error('name','<span>','</span>')
echo validation_error()
直接输出全部结果(推荐使用)
CodeIgniter笔记之数据库訪问
改动配置文件
application/config/database.php
装载
将数据库訪问对象。装载到超级对象属性中 $this->load->database();
查询
1 |
$res->$this->db->query($sql) //返回查询结果对象对象 |
參数绑定
1 |
$sql="select * from blog_user where name=?"; |
db的自己主动载入
配置自己主动载入db application/config/autoload.php
1 |
$autoload['libaraied'] = array('database'); // 就不须要$this->load->database(); |
CI的AR模型 Active Record
配置
applicaion/config/database.php
设置$active_record
= TRUE
操作
1 |
$res=$this->db->get('表名'); // 返回结果对象 |
连贯操作
模拟sql语句
1 |
$res=$this->db->select('id,name')->from('user')->where('id>=3'); |
使用where
1 |
$res=$this->db->where('name','mary')->get('user'); |
复杂的查询使用參数绑定
$this->db->query($sql,$data)
数据库查询结果
result()
方法运行成功返回一个对象数组,失败则返回一个空数组。
例:
1 |
$query = $this->db->query("要运行的 SQL"); foreach ($query->result() as $row) |
推断结果集的条目数
1 |
if ($query->num_rows() > 0) |
result_array()
该方法运行成功时将记录集作为关联数组返回。失败时返回空数组。
1 |
$query = $this->db->query("要运行的 SQL"); foreach ($query->result_array() as $row) |
row()
该函数将当前请求的第一行数据作为 object 返回。
总结。CI中的增删改查
查
- 得到一个表
1 |
$this->db->get('表名') |
- 单个表条件查询
1 |
$this->db->get_where('表名','关联数组条件') |
单表查询多个限定条件,链式查询
1
$this->db->select('title')->from('mytable')->where('id', $id)->limit(10, 20);
$query = $this->db->get();多表查询
1 |
$this ->db->query($sql,$data) |
增
能够向函数传递 数组 或一个 对象。
$bool = $this->db->insert('表名',关联数组);
$data = array(
'title' => 'My title' ,
'name' => 'My Name' ,
'date' => 'My date'
);
$this->db->insert('mytable', $data);
// Produces: INSERT INTO mytable (title, name, date) VALUES ('My title', 'My name', 'My date')
改
1 |
$bool=$this->db->update('表名',关联数组,条件); $data = array( |
或
1 |
$this->db->update('mytable', $data, array('id' => $id)); |
删
1 |
$bool =$this->db->delete('表名',条件) |
初探PHP框架(一)
前言
完毕了一个小项目。使用Apache+MySql+PHP。PHP中使用的框架是CodeIgniter,这是一个轻量易扩展的PHP MVC框架。适用于轻量级的站点搭建。CodeIgniter手冊清晰丰富,覆盖了一般站点的全部需求。
为了更好地理解PHP里面框架的设计。目标是自己写一个简单的PHP MVC框架,一方面可以更深入地学习PHP,一方面也可以更深入地理解框架设计里面的思想。
Apache的工作流程
Apache是一个Webserver。也能够叫做httpserver,由于Apache仅仅能处理http请求。
常见的webserver还有Nginx
Apache的工作流程例如以下:
- 浏览器向server发出HTTP请求(Request)。
- server收到浏览器的请求数据,经过分析处理。向浏览器输出响应数据(Response)。
- 浏览器收到server的响应数据,经过分析处理,将终于结果显示在浏览器中。
Apache和Nginx都属于Webserver,两者都实现了HTTP 1.1协议。
所以假设有人问FTP协议能够在Apache上工作吗?答案是用Apache FTP Server能够,Apache webserver不能够。
Apache是用C语言写的,server当然要追求高效率。
PHP原理
PHP的核心解释器是用C语言写的,相当于我们写了PHP代码。会有一个C语言写好的解释工具一边解释,一边运行。实际上在写PHP的时候就是在使用一个C语言写好的工具。我们的PHP代码就是指挥这个工具的命令。
PHP包含四层体系:
- Zend引擎:Zend总体用纯C实现。是PHP的内核部分。负责翻译PHP代码。是一切的核心。
- Extensions:环绕Zend引擎,通过组件方式提供基础服务。
常见内置函数如array是由extension实现的。
- Sapi通过一系列的钩子函数,使得PHP能够和外围交互数据。如Apache
- 上层应用:平时写的PHP程序
假设PHP是一辆车,那么车的框架就是PHP本身。Zend是车的引擎(发动机)。Ext以下的各种组件就是车的轮子。Sapi能够看做是公路, 车能够跑在不同类型的公路上,而一次PHP程序的运行就是汽车跑在公路上。
因此,我们须要:性能优异的引擎+合适的车轮+正确的跑道。
PHP的运行的核心是翻译出来的一条一条指令,也即opcode。
hashtable是PHP的核心数据结构,数组就是典型的应用。Zend hash table实现了典型的hash表散列结构,同一时候通过附加一个双向链表(解决冲突),提供了正向、反向遍历数组的功能。
更具体的内容參考这里
PHP在Apache上执行
以模块载入的方式执行
这样的方式使用了Apache的Hook机制。所谓Hook机制,就是在自己的程序执行的时候同意别的模块插上一腿。
当我们配置Apacheserver的http.config
文件时,写入mod_php5.so/php5apache2.dll
就是将自己定义的函数注入到Apache的请求处理循环其中。在模块化的执行方式中。PHP与Webserver一起启动而且执行。通过Apache自身的进程线程管理来处理并发的请求。
以CGI,FastCGI方式执行
CGI英文叫做公共网关接口,CGI是外部应用程序(CGI程序)与Webserver之间的接口标准,是在CGI程序和Webserver之间传递信息的规程。
Apache在Http请求的时候会将请求提交给CGI应用程序(php-cgi.exe)解释,解释之后的结果返回给Apache。然后再返回给对应的请求用户。
CGI VS FastCGI
FastCGI是CGI的加强版本号,CGI是单进程,多线程的运行方式。程序运行完毕之后就会销毁。
FastCGI是常驻(long-live)型的CGI.有自身的进程管理器,不必每一次都fork一个进程(CGI解释器)去运行。
常见的PHP-FPM是一个PHP FastCGI管理器。
关于很多其它的对照能够看这里。
眼下在HTTPServer这块基本能够看到有三种stack比較流行:
(1)Apache+mod_php5
(2)lighttp+spawn-fcgi
(3)nginx+PHP-FPM
三者后两者性能可能稍优,可是Apache因为有丰富的模块和功能,眼下来说仍旧是老大。有人測试nginx+PHP-FPM在高并发情况下可能会达到Apache+mod_php5的5~10倍,如今nginx+PHP-FPM使用的人越来越多。
初探PHP框架(二)
在写第一个PHP框架的时候參考这位大哥,的内容和Codeigniter框架的源代码。
程序框架的搭建
前提:已经搭建好了一个apache+PHP的开发环境,我使用的是Apache+mod_php5的方式。
在根文件夹simplemvc
下新建下面文件夹
config
用来存放配置文件controller
用来存放控制器lib
用来存放引入的库文件model
用来存放模型system
用来存放系统文件core
核心文件,包含核心controller控制器等,全部的controller都要继承于他lib
存放核心的库文件。包含route等app.php
应用程序驱动类
view
用来存放视图index.php
项目的入口文件,程序是从这里開始运行的。
定义系统路径
1 |
//提前定义 |
提前定义一些常量。在之后的程序中我们会使用这些路径。
载入配置文件,和应用程序驱动类
配置文件
在config目录下的config.php
··
$CONFIG[‘system’][‘db’]
PHP框架认识初步的更多相关文章
- ABP开发框架前后端开发系列---(2)框架的初步介绍
在前面随笔<ABP开发框架前后端开发系列---(1)框架的总体介绍>大概介绍了这个ABP框架的主要特点,以及介绍了我对这框架的Web API应用优先的一些看法,本篇继续探讨ABP框架的初步 ...
- 爬虫框架Scrapy初步使用
本文转载自: Scrapy 爬取并分析酷安 6000 款 App,找到良心佳软(抓取篇) https://www.makcyun.top/web_scraping_withpython10.html ...
- 轻量级前端MVVM框架avalon - 初步接触
迷你简单易用的MVVM框架 avalon的介绍http://rubylouvre.github.io/mvvm/ 按照作者的介绍,在HTML中添加绑定,在JS中用avalon.define定义View ...
- 快速开发~Rafy框架的初步认识
当我们开始使用EF的同时,是不是就会更好的认识了其他的ORM框架,最近接触了Rafy的使用,感觉还是蛮有兴趣去学习的,虽然最初的我到现在看的并不深入,但是我个人感觉还是可以简单地做一些总结的啦,或许语 ...
- Spring框架的初步学习
(1) IOC 控制反转 所谓的控制反转就是应用本身不负责依赖对象的创建和维护,依赖对象的创建及维护是由 外部容器负责的(spring是外部容器之一).这样控制权就由应用转移到了外部容器,控制权 的转 ...
- flask微服务框架的初步接触
测试2个关联的系统接口时,经常会遇到被测试系统或被测app的处理内部处理流程会依赖另一个系统的接口返回结果,这时,常用的做法就是写一个模拟测试桩,用作返回请求时的结果.java可以用servicele ...
- Scrapy框架的初步使用
Scrapy scrapy框架是一个非常全面的爬虫框架,可以说是爬虫界的django了,里面有相当多的组件,格式化组件item,持久化组件pipeline,爬虫组件spider 首先我们要先和djan ...
- JAVA 爬虫框架webmagic 初步使用Demo
一想到做爬虫大家第一个想到的语言一定是python,毕竟python比方便,而且最近也非常的火爆,但是python有一个全局锁的概念新能有瓶颈,所以用java还是比较牛逼的, webmagic 官网 ...
- XUtils框架之初步探索
Xutils分为四大模块. BitmapUtils DBUtils ViewUtils HttpUtils
随机推荐
- 并发策略-CAS算法
对于并发控制而言,我们平时用的锁(synchronized,Lock)是一种悲观的策略.它总是假设每一次临界区操作会产生冲突,因此,必须对每次操作都小心翼翼.如果多个线程同时访问临界区资源,就宁可牺牲 ...
- (3)PHP环境搭建和使用
一.php开发环境 php开发的环境组件一般需要 apache(iis)+mysql+php 可以自己搭建环境或者用别人把这几项集成好的软件,自己搭建的环境配置起来麻烦但可以选择任意版本,集成的软件安 ...
- 洛谷——P1579 哥德巴赫猜想(升级版)
P1579 哥德巴赫猜想(升级版) 题目背景 1742年6月7日哥德巴赫写信给当时的大数学家欧拉,正式提出了以下的猜想:任何一个大于9的奇数都可以表示成3个质数之和.质数是指除了1和本身之外没有其他约 ...
- XTU | 物联网概论复习总结
物联网(IoT) 写在前面 本文严禁转载,只限于学习交流. 这只是笔者在复习所学这门专业课时整理的一些材料,粗制滥造,还望多多包涵. 笔者这里总结复习材料的绝大部分来自叶st老师在最后一节复习课上的提 ...
- elasticsearch 插件使用
5.3.0新版本好像插件和开源的项目没有以前的多,官网就那么几个 常用的先安装Kibana: 提供炫丽的可视化图形展示并且作为elasticsearch的搜索的小清新客户端 1.下载安装包 wget ...
- linux-设置环境变量-export
Linux export命令用于设置或显示环境变量. 在shell中执行程序时,shell会提供一组环境变量.export可新增,修改或删除环境变量,供后续执行的程序使用.export的效力仅及于该次 ...
- 查看tomcat启动文件都干点啥---server对象
在上一章查看tomcat启动文件都干点啥---Catalina.java中说道了构造Server,,这次尝试着说一下Tomcat中Server的内容,首先看一下org.apache.catalina. ...
- How to: Launch the Debugger Automatically
Sometimes, you may need to debug the startup code for an application that is launched by another pro ...
- Vue服务端渲染 VS Vue浏览器端渲染)
Vue 2.0 开始支持服务端渲染的功能,所以本文章也是基于vue 2.0以上版本.网上对于服务端渲染的资料还是比较少,最经典的莫过于Vue作者尤雨溪大神的 vue-hacker-news.本人在公司 ...
- JS创建对象的方式有几种
相信但凡作为一个前端工程师,都被面试到过这个面试题目,HR考察的就是对oop思想的理解. 作为一个从后端转过来的怂逼,oop一直是心中的永远的痛啊. 这几天一直在通读js高级程序设计,重复理解js创建 ...