Z-PHP 3.0 beta 版本

公告 未结
1 155
playboy
playboy VIP 1 2018-06-28
悬赏:0

之前说过想要重构一下代码,由于前一段时间事情比较多,所以进度慢了很多。

今天抽空整理了一下,这个版本还没有经过详细测试,有时间的同学可以先拿去测试一下。任何问题请在提问板块留言。

下载链接:Z-PHP_v3.0.0_beta.zip

以下是新版的变更:

最主要的改动是数据操作 和 缓存。数据模型加入了读写分离和缓存。

单独封装了直接书写SQL语句的PDO类,同样支持读写分离和数据缓存,效率上要比数据模型高那么一点,内存消耗上也少一点。追求性能的可以考虑使用。

另外数据模型的私有属性和方法都加了前缀,用来避免继承后带来的冲突。

配置文件:

return [
	'ERROR_LOG' => 'error_log'	//错误日志目录
	'CACHE_MOD'	=>	2,	//缓存方式 0:file,1:redis,2:memcached
	/*数据库*/
	'DB_HOST' => '127.0.0.1', // 可配置为数组
	'DB_NAME' => 'db1',// 可配置为数组,顺序对应 DB_HOST
	'DB_USER' => 'root',// 可配置为数组,顺序对应 DB_HOST
	'DB_PASS' => 'root',// 可配置为数组,顺序对应 DB_HOST
	'DB_PORT' => '3306', // 可配置为数组,顺序对应 DB_HOST
	'DB_CHARSET' => 'utf8', // 字符集
	'DB_PREFIX' => 'col_', // 数据表前缀

	/*数据库SSL*/ //!!! 此项尚未测试
	// 'DB_SSL_KEY' => '/etc/mysql/ssl/client-key.pem',
	// 'DB_SSL_CERT' => '/etc/mysql/ssl/client-cert.pem',
	// 'DB_SSL_CA' => '/etc/mysql/ssl/ca-cert.pem',

	/*redis*/
	'REDIS_HOST' => '127.0.0.1', //地址
	'REDIS_PORT' => 6379, //端口
	'REDIS_TIMEOUT' => 1, //超时时间(秒)
	'REDIS_PASS' => null, //连接密码
	'REDIS_DB' => 1, //要操作的库

	/*session存储方式:0:文件,1:redis*/
	'SESSION_MOD'=>1,

	/*memcached*/
	'MEMCACHED'=>[
		['127.0.0.1','11211'],
		['127.0.0.2','11211'],
		// ...更多服务器
	],
];


#1:实例化数据模型

支持传入数据库连接参数(参数格式与 config 配置文件相同)

支持配置读写分离(DB_HOST配置为数组,默认第一个为写服务器,其余为只读)

$config = [
	'DB_HOST' => ['127.0.0.1','127.0.0.1'],
	'DB_NAME' => 'db1',
	'DB_USER' => 'root',
	'DB_PASS' => 'root',
	'DB_PORT' => '3306',
	'DB_PREFIX' => 'zphp_', //表名前缀
	'DB_CHARSET' => 'utf8', //字符集
	'DB_CACHEMOD' => 0 //缓存方式
];
$m = D($table,$config);
$m = M($table,$config);

#2:如果你喜欢写原生的SQL语句

$db = new \z\pdo($config); // 可以传入连接参数
$fix = $db->getPrefix(); // 获取表前缀
$sql = "SELECT `username` FROM `{$fix}user` WHERE `userid` > :userid";
$bind = [':userid'=>10]; //绑定参数
$result = $db->queryAll($sql,$bind); //查询多条记录
$result = $db->queryOne($sql,$bind); //查询单条记录
$result = $db->queryFields($sql,$bind); //查询某字段的多条记录
$result = $db->queryField($sql,$bind); //查询某字段的单条记录
$result = $db->cache(10)->queryField($sql,$bind); //缓存查询
$result = $db->submit($sql,$bind); //增删改的提交方式
$result = $db->begin(); //开始事务
$result = $db->commit(); //提交事务
$result = $db->rollback(); //回滚事务

#3:直接使用PDO

$pdo = PDO($config) // 支持传入连接参数

#4:查询缓存

$result = $m->where($where)->cache(10,$mod)->select();

cache() 方法第一个参数是缓存时间,单位是秒。第二参数 $mod 是缓存方式(0:文件方式,1:redis,2:memcached)

cache() 必须在语句最后的select()、find()、queryAll ... 等之前调用
$mod 为空时 使用配置参数,无配置参数时 采用文件方式缓存

#5 使用 redis

$config = [
	'REDIS_HOST' => '127.0.0.1', //地址
	'REDIS_PORT' => 6379, //端口
	'REDIS_TIMEOUT' => 1, //超时时间(秒)
	'REDIS_PASS' => null, //连接密码
	'REDIS_DB' => 1, //要操作的库
];
$redis = R(1,$config); // 第一个参数是要操作的库,第二个参数可以传入连接配置

#6 使用 memcached

$config = [['127.0.0.1','11211']];
$mem = MEM($config) // 可以传入连接参数

#7 redis 缓存

RC($key,$data=null,$t=0);
// $key:缓存键名
// $data:要缓存的数据
// $t:生存时间

$data = RC($key); // 获取缓存


#8 使用redis存储session

配置文件中定义 'SESSION_MOD'=>1

#9 memcached 缓存

MC($key,$data=null,$t=0);
// $key:缓存键名
// $data:要缓存的数据
// $t:生存时间

$data = MC($key); // 获取缓存

#10 文件缓存

FC($file,$data=null,$t=0);
// $file:文件名
// $data:要缓存的数据
// $t:生存时间

$data = FC($key); // 获取缓存

#11 S()方法

S($cache,$data=null,$time=0);
// 生存时间为0的时候将使用文件方式缓存,否则采用配置文件的 CACHE_MOD 值(0:文件方式,1:redis,2:memcached)
// $cache 缓存键名或是文件路径
// $data 要缓存的数据
// $time 生存时间

$data = S($cache); // 获取缓存

#12 _404()方法

可在控制器中自定义 _404() 方法覆盖框架的 _404()方法


暂时只想到这些,如有遗漏后边再补充


回帖

温馨通道

回贴周榜

本周热议
没有相关数据