数组式访问-ArrayAccess
以前对ArrayAccess不是很熟悉,现在整理下下有关ArrayAccess相关的知识,ArrayAccess接口就是提供像访问数组一样访问对象的能力的接口。
接口内容如下:
ArrayAccess {
//检查一个偏移位置是否存在
abstract public boolean offsetExists ( mixed $offset );
//获取一个偏移位置的值
abstract public mixed offsetGet ( mixed $offset );
//设置一个偏移位置的值
abstract public void offsetSet ( mixed $offset , mixed $value );
//复位一个偏移位置的值
abstract public void offsetUnset ( mixed $offset );
}
项目中使用,获取网站配置:
<?php
namespace lib;
use mpf\core\Di;
class config implements \ArrayAccess{
//定义存储数据的数组
protected $configs;
public function __construct($configs){
$this->configs = $configs;
$configs = \lib\model\Home::getWebConfig();
foreach( $configs as $config ){
if( !isset($this->configs[$config['sc_key']]) ){
$this->configs[$config['sc_key']] = $config['sc_content'];
}
}
}
public function get($key){
if( isset($this->configs[$key]) ){
return $this->configs[$key];
}elseif( $key == 'caipiao'){
$this->configs['caipiao'] = \lib\model\Home::getLcs();
return $this->configs[$key];
}elseif( $key == 'user_money' ){
if( isset($_SESSION['uid']) ){
if( $_SESSION['utype'] == 5 ){
$sql = 'select money from inner_user where uid=?';
}else{
$sql = 'select money from user where uid=?';
}
$this->configs['user_money'] = \mpf\core\Di::$Di->db->prepare_query($sql,[getUid()])->fetch(\PDO::FETCH_COLUMN);
return $this->configs['user_money'];
}
}
}
public function offsetExists($index){
return isset($this->configs[$index]);
}
public function offsetGet($index){
return $this->configs[$index];
}
public function offsetSet($index,$val){
$this->configs[$index] = $val;
}
public function offsetUnset($index){
unset($this->configs[$index]);
}
}
这样可以使用config对象来直接访问配置信息内容。
---------------------------------
配置程序:
我们可以通过ArrayAccess利用配置文件来控制程序。
1. 在项目更目录下创建一个config目录
2. 在config目录下创建相应的配置文件,比如app.php 和 database.php。文件程序如下
app.php
<?php
return [
'name' => 'app name',
'version' => 'v1.0.0'
];
database.php
<?php
return [
'mysql' => [
'host' => 'localhost',
'user' => 'root',
'password' => '12345678'
]
];
3. Config.php实现ArrayAccess
<?php
namespace Config;
class Config implements \ArrayAccess
{
private $config = [];
private static $instance;
private $path;
private function __construct()
{
$this->path = __DIR__."/config/";
}
public static function instance()
{
if (!(self::$instance instanceof Config)) {
self::$instance = new Config();
}
return self::$instance;
}
public function offsetExists($offset)
{
return isset($this->config[$offset]);
}
public function offsetGet($offset)
{
if (empty($this->config[$offset])) {
$this->config[$offset] = require $this->path.$offset.".php";
}
return $this->config[$offset];
}
public function offsetSet($offset, $value)
{
throw new \Exception('不提供设置配置');
}
public function offsetUnset($offset)
{
throw new \Exception('不提供删除配置');
}
}
$config = Config::instance();
//获取app.php 文件的 name
echo $config['app']['name'].PHP_EOL; //app name
//获取database.php文件mysql的user配置
echo $config['database']['mysql']['user'].PHP_EOL; // root
数组式访问-ArrayAccess的更多相关文章
- ArrayAccess(数组式访问)
实现该接口后,可以像访问数组一样访问对象. 接口摘要: ArrayAccess { abstract public boolean offsetExists ( mixed $offset ) abs ...
- php使用数组语法访问对象
有一个对象,不过希望能用数组的语法来读写数据,可以使用 实现SPL的ArrayAccess接口来解决. 使用场景:加载配置文件类.larvel框架加载配置文件就这利用数组来操作对象. 数组式访问Obj ...
- 模拟jquery链式访问
一直写代码写代码,博客都快荒废了,眼看一月要过完,不能不留下点记忆,嘿嘿,刚研究了下jquery的链式访问,这么好用的技能我赶紧get了下,研究后略微修改,模拟一个简单的链式访问,下面这段代码支持修改 ...
- C# 类如何声明索引器以提供对类的类似数组的访问的代码
研发期间,将内容过程中比较常用的内容段做个收藏,如下内容内容是关于 C# 类如何声明索引器以提供对类的类似数组的访问.的内容,希望能对各位有用处. using System;using System. ...
- ruby中的链式访问和方法嵌套
先看一道题,这道题是codewars上的一道题,我很早就看到了,但是不会写.等到又看到这道题的时候,我刚看完元编程那本书,觉得是可以搞定它的时候了.废话不多说,先看这道题,题目最开始是为JavaScr ...
- C语言中的数组的访问方式
闲下来,写的代码,很是简单,不解释,代码如下: #include <stdio.h> int main(int argc, char **argv) { char cArray[] = & ...
- 阿里云虚拟主机针对恶意频繁攻击式访问造成CPU爆满的解决方法
最近网站CPU经常爆满,到阿里云提交了工单,工程师给我的处理意见: 您好,虚拟主机CPU占用比较高通常这种情况有两种可能: 一是网站应用程序代码逻辑较复杂,或业务架构效率比较低,在请求了某个网 ...
- (C/C++学习)7.数组及其访问方式
说明:数组的数据类型是一种构造类型,而存储数组的内存是一段连续的存储区域.数组的数据类型决定了连续内存的访问方式,它包括数组的三要素:起始地址.步长以及元素个数. 一.一维数组 1.形式:type 数 ...
- android JNI 一维数组、二维数组的访问与使用
在JNI中访问JAVA类中的整型.浮点型.字符型的数据比较简单,举一个简单的例子,如下: //得到类名 jclass cls = (*env)->GetObjectClass(env, obj) ...
随机推荐
- Shell-5--位置参数变量
- 机器学习基石笔记:09 Linear Regression
线性回归假设: 代价函数------均方误差: 最小化样本内代价函数: 只有满秩方阵才有逆矩阵. 线性回归算法流程: 线性回归算法是隐式迭代的. 线性回归算法泛化可能的保证: 根据矩阵的迹的性质:tr ...
- docker环境 宿主机和容器之间复制文件
容器往宿主机:docker cp 3234234324234:/database_dump_bak/db_bak.dmp /home/test 宿主机往容器:docker cp wenjian_001 ...
- 为什么我们喜欢用 sigmoid 这类 S 型非线性变换?
本文整理自 @老师木 的一条图片新浪微博,从另一个角度给出为何采用 sigmoid 函数作非线性变换的解释. 为什么我们喜欢用 sigmoid 这类 S 型非线性变换?
- MySQL笔记(7)---事务
1.前言 前面具体讲了MySQL中的锁实现的方式,解释了是如何保证数据在并发情况下的可靠性,并提到了事务REPETABLE READ和READ COMMITTED,解释了一下这两种事务的不同.本章讲具 ...
- abstract、virtual、sealed、 interface、struct 基础知识整理
abstract abstract 修饰符指示被修改内容的实现已丢失或不完整. abstract 修饰符可用于类.方法.属性.索引和事件. 在类声明中使用 abstract修饰符以指示某个类仅旨在作为 ...
- Spring Boot 集成 Swagger2 与配置 OAuth2.0 授权
Spring Boot 集成 Swagger2 很简单,由于接口采用了OAuth2.0 & JWT 协议做了安全验证,使用过程中也遇到了很多小的问题,多次尝试下述配置可以正常使用. Maven ...
- Android的Touch事件分发机制简单探析
前言 Android中关于触摸事件的分发传递是一个很值得研究的东西.曾不见你引入了一个ListView的滑动功能,ListView就不听你手指的指唤来滚动了:也不知道为啥Button设置了onClic ...
- 给recycleview加headview
参考了https://blog.csdn.net/qibin0506/article/details/49716795 由于recycleview没有直接添加头部view的api,所以需要我们自己去添 ...
- Spring Boot + Spring Cloud 实现权限管理系统 后端篇(十七):登录验证码实现(Captcha)
登录验证码 登录验证是一般系统都会有的功能,验证的方式也多种多样,比如输入式验证码,拖动式验证条,拖动式验证拼图等等. 我们这里先实现常规的输入验证码的方式,右边显示验证码图片,点击可刷新,左边输入验 ...