使用C语言开发PHP框架

  • 时间:
  • 浏览:800
  • 来源:成都艾邦软件开发

首先--添加dll修改php.ini--不同的版本不同的需求

其次根据教程/manual/tutorial.firstpage.html#tutorial.directory手动搭建好目录结构

入口文件index.php位置稍作修改--个人习惯

入口文件内容

?phpheader(Content-Type: text/html;charsetutf-8);define(APP_PATH, realpath(dirname(__FILE__) . /../)); /* 指向public的上一级 */$app new Yaf_Application(APP_PATH . /yaf/conf/application.ini);$app-run();

配置文件

配置文件内容

[product];支持直接写PHP中的已定义常量application.directoryAPP_PATH /yaf/application

集成了一个数据库操作类

控制器写法

new DBModel();的意思是去models文件夹下找DB.php里的DBModel类

DB.php

D:WWWyafapplicationmodelsMysqli.php

?php/** * * | WeizePHP [ This is a freeware ] * * | Copyright (c) 2013 - 2113 /weizephp/ All rights reserved. * * | Author: 韦泽 e-mail:weizeswgmail.com QQ:310472156 * * | 文件功能mysqli 数据库操作、分页类 * *//*// 使用方法// define(ROOT_PATH, ..); // 单独提取本站的 db_mysqli 类在其他地方使用时请注意错误日志 ROOT_PATH 路径是否正确$host localhost;$username root;$passwd ;$dbname weizephp;$port 3306;$socket NULL;$dbcharset utf8;$error_reporting TRUE; // $error_reporting 为 FALSE 时显示错误适用于开发的时候调试$DB new db_mysqli($host, $username, $passwd, $dbname, $port, $socket, $dbcharset, $error_reporting); // 连接数据库echo br 获取单条结果 brbr;$sql SELECT * FROM weize_user_admin_log;$row $DB-get_one($sql); // 获取单条结果print_r($row);echo brbr 获取全部结果 brbr;$sql SELECT * FROM weize_user_admin_log;$all $DB-get_all($sql); // 获取全部结果print_r($all);echo brbr 获取[分页]结果 brbr;$sql SELECT * FROM weize_user_admin_log;$page_data $DB-page($sql); // 获取分页结果$showpage $DB-showpage(); // 获取上一页、下一页的变量print_r($page_data);// 输出分页数据echo brbr;echo $showpage;// 输出上一页、下一页的HTML字符串*/class MysqliModel extends mysqli {public $error_reporting FALSE; // 是否显示错误报告,false为显示true为不显示public $result NULL; // 结果集public $page_count 0; // 总记录数用于分页public $page_all 0; // 总页数public $page_current 1; // 当前页public $page_size 10; // 每页显示条数/*** 构造函数*/public function __construct($host, $username, $passwd, $dbname , $port 3306, $socket NULL, $dbcharset utf8, $error_reporting TRUE) {parent::__construct($host, $username, $passwd, $dbname, $port, $socket);if($this-connect_error) {if($error_reporting FALSE) {die(Could not connect: ( . $this-connect_errno . ) . $this-connect_error);} else {// 记录连接错误日志$url htmlspecialchars($_SERVER[REQUEST_URI]);$time time();$date date(Y-m-d H:i:s, $time);$data ?php exit; ? [DATE]$date [URL]$url [CONNECT_ERRNO]. $this-connect_errno . [CONNECT_ERROR]. $this-connect_error .;error_log($data, 3, ROOT_PATH . /data/log/.date(Ymd, $time)._mysql_error.php);// 停止程序执行//die(Could not connect MySQL.);}}$this-error_reporting $error_reporting;$this-set_charset($dbcharset);}/*** 数据库执行语句可执行查询添加修改删除等任何sql语句* 失败时返回 FALSE通过 mysqli_query() 成功执行SELECT, SHOW, DESCRIBE或 EXPLAIN查询会返回一个mysqli_result 对象其他查询则返回TRUE。*/public function query($sql, $resultmode MYSQLI_STORE_RESULT) {$this-result parent::query($sql, $resultmode);if($this-result FALSE) {if($this-error_reporting FALSE) {die(Invalid query: . $this-errno . . $this-error. . SQL: . $sql);} else {// 记录请求错误日志$url htmlspecialchars($_SERVER[REQUEST_URI]);$time time();$date date(Y-m-d H:i:s, $time);$data ?php exit; ? [DATE]$date [URL]$url [QUERY_ERRNO]. $this-errno . [QUERY_ERROR]. $this-error .;error_log($data, 3, ROOT_PATH . /data/log/.date(Ymd, $time)._mysql_error.php);// 停止程序执行//die(Invalid query.);}}return $this-result;}/*** 获取一条数据如果没有数据返回空数组* param array*/public function get_one($sql) {$res $this-query($sql);if ($res ! FALSE) {$row $res-fetch_assoc();if(!empty($row)) {return $row;} else {return array();}} else {return array();}}/*** 获取所有数据如果没有数据返回空数组*/public function get_all($sql) {$res $this-query($sql);if ($res ! FALSE) {//$arr $result-fetch_all($resulttype); // MYSQLI_NUM,MYSQLI_ASSOC,MYSQLI_BOTH (PHP 5 5.3.0)$arr array();while($row $res-fetch_assoc()) {$arr[] $row;}$res-free(); // free result setreturn $arr;} else {return array();}}/*** * | 分页* * | 使用实例* | $DB new db_mysqli(...);* | $page_data $DB-page(SELECT * FROM test); // 获取数据* | $showpage $DB-showpage(); // 生成分页链接* | print_r($page_data);* | echo $showpage; // 输出分页链接* */public function page($sql, $page_size 10) {// 总记录数$this-page_count $this-query($sql)-num_rows;if($this-page_count 0) {// 总页数$this-page_all ceil($this-page_count / $page_size);// 当前页$this-page_current ( isset($_GET[page]) (intval($_GET[page])0) ) ? intval($_GET[page]) : 1;if($this-page_current $this-page_all) {$this-page_current $this-page_all;}// 每页显示条数$this-page_size $page_size;$sql $sql . LIMIT . (($this-page_current-1) * $this-page_size) . , . $this-page_size;return $this-get_all($sql);} else {return array();}}// 获取地址栏差数主要用于分页时传递其他差数。$unset用于去掉不需要传值的参数多个用,隔开public function geturl($unset ) {$list array();$keys explode(,, $unset);foreach ($_GET as $key $val) {if (!in_array($key, $keys)) {$list[] $key..urlencode($val);}}return implode(amp;, $list);}// 显示分页需要配合page()函数使用$show_numTRUE表示显示数字分页否则显示首页、上一页、下一页、尾页public function showpage($show_num TRUE) {//echo 123123;$page ;if($this-page_all 1) {$url $this-geturl(page);$url empty($url) ? ?page : ?.$url.amp;page;if($this-page_current 1) {$page . a href.$url.1首页/a a href.$url.($this-page_current-1).上一页/a ;} else {$page . span首页/span span上一页/span ;}if($show_num) {if($this-page_all 6) {$arr range(1, $this-page_all);} else {if($this-page_current 3) {$arr range(1, 5);} elseif ( $this-page_current $this-page_all $this-page_current ($this-page_all - 3) ) {$arr range(($this-page_all - 4), $this-page_all);} else {$arr range(($this-page_current - 2), ($this-page_current 2));}}foreach($arr as $val) {if($val $this-page_current) {$page . span.$val./span ;} else {$page . a href.$url.$val..$val./a ;}}}if($this-page_current $this-page_all) {$page . a href.$url.($this-page_current 1).下一页/a a href.$url.$this-page_all.尾页/a ;} else {$page . span下一页/span span尾页/span ;}$page . $this-page_count . 条记录 . $this-page_current . #047; . $this-page_all . 页 ;}return $page;} }

视图

完成

C程序使用 googletest 测试框架

googletest C/C 测试框架非常好用介绍及下载请看  /p/googletest/

//

// 使用 googletest 测试框架

//

// Returns n! (the factorial of n). For negative n, n! is defined to be 1.

int Factorial(int n)

{

int result 1;

for (int i 1; i n; i)

{

result * i;

}

return result;

}

#include src/gtest-all.cc

// Tests Factorial().

// Tests factorial of negative numbers.

TEST(FactorialTest, Negative)

{

EXPECT_EQ(1, Factorial(-5));

EXPECT_EQ(1, Factorial(-1));

EXPECT_TRUE(Factorial(-10) 0);

}

// Tests factorial of 0.

TEST(FactorialTest, Zero)

{

EXPECT_EQ(1, Factorial(0));

}

// Tests factorial of positive numbers.

TEST(FactorialTest, Positive)

{

EXPECT_EQ(1, Factorial(1));

EXPECT_EQ(2, Factorial(2));

EXPECT_EQ(6, Factorial(3));

EXPECT_EQ(40320, Factorial(8));

}

#include src/gtest_main.cc

相关文档

CPUs3c2410

OSLinux Kernel 2.6.30.4

最近刚做完的嵌入式键盘的驱动由于初次接触总结一下。

首先简单说说这个键盘的实现原理IIC总线工作原理没必要废话s3c2410的手册中讲的很明白。硬件方面这个键盘通过一个AVR单片机(ATMEGA48)接在IIC总线上也就是说直接与IIC总线链接的设备并不是我们用的键盘而是 ......

1.引言

本文的写作目的并不在于提供C/C程序员求职面试指导而旨在从技术上分析面试题的内涵。文中的大多数面试题来自各大论坛部分试题解答也参考了网友的意见。

许多面试题看似简单却需要深厚的基本功才能给出完美的解答。企业要求面试者写一个最简单的strcpy函数都可看出面试者在技术上究竟达到 ......

试题5编写一个函数作用是把一个char组成的字符串循环右移n个。比如原来是“abcdefghi”如果n2移位后应该是“hiabcdefgh”

函数头是这样的

//pStr是指向以\u0000结尾的字符串的指针

//steps是要求移动的n

void LoopMove ( char * pStr, int steps )

{

//请填充...

}

......

第二章 数据类型

一、数据类型分类

1 联合类型

2 函数类型

3 数量类型

3.1算术类型

① 基本数据类型

整型(包括char)

浮点型 ......

转自/12/3067012.shtml

动态连接库的创建步骤

一、创建Non-MFC DLL动态链接库

1、打开File — New — Project选项选择Win32 Dynamic-Link Library —sample project

—工程名DllDemo

2、新建一个.h文件DllDemo.h

以下是引用片段 ......