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('','','');
$bool=$this->form_validation->run();

前台验证使用js,后台验证使用表单验证类

输出错误

form_error('name','<span>','</span>')

echo validation_error()直接输出全部结果(推荐使用)

CodeIgniter笔记之数据库訪问

改动配置文件

application/config/database.php

装载

将数据库訪问对象。装载到超级对象属性中 $this->load->database();

查询

1
$res->$this->db->query($sql) //返回查询结果对象对象
$res->result() ;// 返回数组,数组中是一个个对象
$res->result_array(); // 返回二维数组。里面是关联数组
$res->row(); // 返回第一条数据

參数绑定

1
$sql="select * from blog_user where name=?";
$this->db->query($sql,$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('表名'); // 返回结果对象
$res->result();
$bool = $this->db->insert('表名',关联数组);
$bool=$this->db->update('表名',关联数组,条件);
$bool=$this->db->delete('表名',条件)
连贯操作

模拟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)
{
echo $row->title;
echo $row->name;
echo $row->body;
}
推断结果集的条目数
1
if ($query->num_rows() > 0)
result_array()

该方法运行成功时将记录集作为关联数组返回。失败时返回空数组。

1
$query = $this->db->query("要运行的 SQL");

foreach ($query->result_array() as $row)
{
echo $row['title'];
echo $row['name'];
echo $row['body'];
}
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)
$sql = "SELECT * FROM some_table WHERE id = ? AND status = ? AND author = ? ";
$query = $this->admin->query($sql, array($id, $status, $author));

能够向函数传递 数组 或一个 对象。

$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(
'title' => $title,
'name' => $name,
'date' => $date
); $this->db->where('id', $id);
$this->db->update('mytable', $data);

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的工作流程例如以下:

  1. 浏览器向server发出HTTP请求(Request)。

  2. server收到浏览器的请求数据,经过分析处理。向浏览器输出响应数据(Response)。

  3. 浏览器收到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包含四层体系:

  1. Zend引擎:Zend总体用纯C实现。是PHP的内核部分。负责翻译PHP代码。是一切的核心。

  2. Extensions:环绕Zend引擎,通过组件方式提供基础服务。

    常见内置函数如array是由extension实现的。

  3. Sapi通过一系列的钩子函数,使得PHP能够和外围交互数据。如Apache
  4. 上层应用:平时写的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
//提前定义
define('SYSTEM_PATH', dirname(__FILE__).'/system');
define('ROOT_PATH', substr(SYSTEM_PATH, 0,-7));
define('SYS_LIB_PATH', SYSTEM_PATH.'/lib');
define('APP_LIB_PATH', ROOT_PATH.'/lib');
define('SYS_CORE_PATH', SYSTEM_PATH.'/core');
define('CONTROLLER_PATH', ROOT_PATH.'/controller');
define('MODEL_PATH', ROOT_PATH.'/model');
define('VIEW_PATH', ROOT_PATH.'/view');

提前定义一些常量。在之后的程序中我们会使用这些路径。

载入配置文件,和应用程序驱动类

配置文件

在config目录下的config.php

··

$CONFIG[‘system’][‘db’]

PHP框架认识初步的更多相关文章

  1. ABP开发框架前后端开发系列---(2)框架的初步介绍

    在前面随笔<ABP开发框架前后端开发系列---(1)框架的总体介绍>大概介绍了这个ABP框架的主要特点,以及介绍了我对这框架的Web API应用优先的一些看法,本篇继续探讨ABP框架的初步 ...

  2. 爬虫框架Scrapy初步使用

    本文转载自: Scrapy 爬取并分析酷安 6000 款 App,找到良心佳软(抓取篇) https://www.makcyun.top/web_scraping_withpython10.html ...

  3. 轻量级前端MVVM框架avalon - 初步接触

    迷你简单易用的MVVM框架 avalon的介绍http://rubylouvre.github.io/mvvm/ 按照作者的介绍,在HTML中添加绑定,在JS中用avalon.define定义View ...

  4. 快速开发~Rafy框架的初步认识

    当我们开始使用EF的同时,是不是就会更好的认识了其他的ORM框架,最近接触了Rafy的使用,感觉还是蛮有兴趣去学习的,虽然最初的我到现在看的并不深入,但是我个人感觉还是可以简单地做一些总结的啦,或许语 ...

  5. Spring框架的初步学习

    (1) IOC 控制反转 所谓的控制反转就是应用本身不负责依赖对象的创建和维护,依赖对象的创建及维护是由 外部容器负责的(spring是外部容器之一).这样控制权就由应用转移到了外部容器,控制权 的转 ...

  6. flask微服务框架的初步接触

    测试2个关联的系统接口时,经常会遇到被测试系统或被测app的处理内部处理流程会依赖另一个系统的接口返回结果,这时,常用的做法就是写一个模拟测试桩,用作返回请求时的结果.java可以用servicele ...

  7. Scrapy框架的初步使用

    Scrapy scrapy框架是一个非常全面的爬虫框架,可以说是爬虫界的django了,里面有相当多的组件,格式化组件item,持久化组件pipeline,爬虫组件spider 首先我们要先和djan ...

  8. JAVA 爬虫框架webmagic 初步使用Demo

    一想到做爬虫大家第一个想到的语言一定是python,毕竟python比方便,而且最近也非常的火爆,但是python有一个全局锁的概念新能有瓶颈,所以用java还是比较牛逼的, webmagic 官网 ...

  9. XUtils框架之初步探索

    Xutils分为四大模块. BitmapUtils  DBUtils ViewUtils HttpUtils

随机推荐

  1. 并发策略-CAS算法

    对于并发控制而言,我们平时用的锁(synchronized,Lock)是一种悲观的策略.它总是假设每一次临界区操作会产生冲突,因此,必须对每次操作都小心翼翼.如果多个线程同时访问临界区资源,就宁可牺牲 ...

  2. (3)PHP环境搭建和使用

    一.php开发环境 php开发的环境组件一般需要 apache(iis)+mysql+php 可以自己搭建环境或者用别人把这几项集成好的软件,自己搭建的环境配置起来麻烦但可以选择任意版本,集成的软件安 ...

  3. 洛谷——P1579 哥德巴赫猜想(升级版)

    P1579 哥德巴赫猜想(升级版) 题目背景 1742年6月7日哥德巴赫写信给当时的大数学家欧拉,正式提出了以下的猜想:任何一个大于9的奇数都可以表示成3个质数之和.质数是指除了1和本身之外没有其他约 ...

  4. XTU | 物联网概论复习总结

    物联网(IoT) 写在前面 本文严禁转载,只限于学习交流. 这只是笔者在复习所学这门专业课时整理的一些材料,粗制滥造,还望多多包涵. 笔者这里总结复习材料的绝大部分来自叶st老师在最后一节复习课上的提 ...

  5. elasticsearch 插件使用

    5.3.0新版本好像插件和开源的项目没有以前的多,官网就那么几个 常用的先安装Kibana: 提供炫丽的可视化图形展示并且作为elasticsearch的搜索的小清新客户端 1.下载安装包  wget ...

  6. linux-设置环境变量-export

    Linux export命令用于设置或显示环境变量. 在shell中执行程序时,shell会提供一组环境变量.export可新增,修改或删除环境变量,供后续执行的程序使用.export的效力仅及于该次 ...

  7. 查看tomcat启动文件都干点啥---server对象

    在上一章查看tomcat启动文件都干点啥---Catalina.java中说道了构造Server,,这次尝试着说一下Tomcat中Server的内容,首先看一下org.apache.catalina. ...

  8. How to: Launch the Debugger Automatically

    Sometimes, you may need to debug the startup code for an application that is launched by another pro ...

  9. Vue服务端渲染 VS Vue浏览器端渲染)

    Vue 2.0 开始支持服务端渲染的功能,所以本文章也是基于vue 2.0以上版本.网上对于服务端渲染的资料还是比较少,最经典的莫过于Vue作者尤雨溪大神的 vue-hacker-news.本人在公司 ...

  10. JS创建对象的方式有几种

    相信但凡作为一个前端工程师,都被面试到过这个面试题目,HR考察的就是对oop思想的理解. 作为一个从后端转过来的怂逼,oop一直是心中的永远的痛啊. 这几天一直在通读js高级程序设计,重复理解js创建 ...