不孬

less is more


  • 首页

  • 关于

  • 标签

  • 分类

  • 归档

  • 搜索

像访问数组一样访问对象

发表于 2018-10-11 | 更新于 2018-12-13 | 分类于 php | 阅读次数:

前言

通过实现php提供的 ArrayAccess 接口,可以方便的实现像操作数组一样访问对象

ArrayAccess接口

php提供的接口,我们看一下要实现的内容

1
2
3
4
5
6
7
8
9
10
11
<?php
ArrayAccess {
// isset判断的时候自动调用
abstract public boolean offsetExists ( mixed $offset )
// 获取数组数据的时候自动调用
abstract public mixed offsetGet ( mixed $offset )
// 添加数据的时候自动调用
abstract public void offsetSet ( mixed $offset , mixed $value )
// unset的时候自动调用
abstract public void offsetUnset ( mixed $offset )
}
阅读全文 »

Yii-RBAC

发表于 2018-10-11 | 更新于 2019-05-30 | 分类于 yii | 阅读次数:

说明

可以先参看 中文官方文档
yii 为我们提供的两种存储方式一种是文件方式一种是数据库方式,这里我们直接使用数据库的方式,yii 文档给的是直接写代码执行的方式,这种虽然更灵活,但是不够直观,而且最常用到的地方就是后台,所以我们使用可视化的模块 yii-admin

yii-admin 扩展过的rbac 和 yii 自带的有一点区别的是权限,yii以权限为基础,而 yii-admin 是以路由为基础的,这一点会在验证的时候进行体现, yii的是Yii::$app->user->can(role||permission, params) ,而 yii-admin 的是 Yii::$app->user->can(route, params)

准备

首先安装 yii-admin 扩展,github地址

创建表

执行创建相关表的 migrate 之前需要先配置一下权限管理方式,我们这里选择数据库存储方式(这里配置的是脚本的配置文件 console 下的)

1
2
3
4
5
6
7
// 配置权限管理方式
'components' => [
...
'authManager' => [
'class' => 'yii\rbac\DbManager', // or use 'yii\rbac\PhpManager'
]
],

两条命令,首先创建yii自带的rbac相关表

1
yii migrate --migrationPath=@yii/rbac/migrations

阅读全文 »

Yii-AFC验证

发表于 2018-10-11 | 更新于 2018-12-17 | 分类于 yii | 阅读次数:

实例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
use yii\web\Controller;
use yii\filters\AccessControl;
class SiteController extends Controller
{
public function behaviors()
{
return [
'access' => [
'class' => AccessControl::className(),
'only' => ['login', 'logout', 'signup'],
'except' => ['login'],
'rules' => [
[
'allow' => true,
'actions' => ['login', 'signup'],
'roles' => ['?'],
],
[
'allow' => true,
'actions' => ['logout'],
'roles' => ['@'],
],
],
],
];
}
// ...
}

验证流程

AccessControl过滤器

注意,如果AccessControll配置的需要验证的action,在配置的rules中如果验证没有通过或者没有rule来验证当前请求的action(也就是不符合所有rule需要验证的action)都会拒绝访问

阅读全文 »

线程&&进程&&协程

发表于 2018-10-11 | 更新于 2018-12-20 | 分类于 python | 阅读次数:
前言算是一篇记录或摘抄的笔记,方便用来查询基础知识点。 多任务-线程单核CPU是怎么执行多任务的呢? 答案就是操作系统轮流让各个任务交替执行,任务1执行0.01秒,切换到任务2,任务2执行0.01秒,再切换到任务3,执行0.01秒……这样反复执行下去。表面上看,每个任务都是交替执行的,但是,由于CPU的执行速度实在是太快了,我们感觉就像所有任务都在同时执行一样。 真正的并行执行多任务只能在多核CPU上实现,但是,由于任务数量远远多于CPU的核心数量,所以,操作系统也会自动把很多任务轮流调度到每个核心上执行。 并发:指的是任务数多余cpu核数,通过操作系统的各种任务调度算法,实现用 ...
阅读全文 »

python迭代器和生成器

发表于 2018-10-11 | 更新于 2018-12-19 | 分类于 python | 阅读次数:

迭代器 Iterator

使用 isinstance() 判断一个对象是否是可迭代(Iterable)对象

1
2
3
4
In [50]: from collections import Iterable
In [51]: isinstance([], Iterable)
Out[51]: True

可迭代对象通过 __iter__ 方法向我们提供一个迭代器,我们在迭代一个可迭代对象的时候,实际上就是先获取该对象提供的一个迭代器(通过 __iter__ 方法获取),然后通过这个迭代器来依次获取对象中的每一个数据.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
>>> class MyList(object):
... def __init__(self):
... self.container = []
... def add(self, item):
... self.container.append(item)
... def __iter__(self):
... """返回一个迭代器"""
... # 我们暂时忽略如何构造一个迭代器对象
... pass
...
>>> mylist = MyList()
>>> from collections import Iterable
>>> isinstance(mylist, Iterable)
True

阅读全文 »

php设计模式简单解析

发表于 2018-10-11 | 更新于 2018-12-13 | 分类于 php | 阅读次数:

装饰器模式

扩展类的原有方法,不需要继承重写,在方法的开始和结尾增加预处理方法

前言

装饰器的思想就是方便对一个方法进行扩展,就和web框架中提供的 beforeAction 和 afterAction 一样

  1. 装饰模式,可以动态的添加修改类的功能
  2. 一个类提供了一项功能,如果要在修改并添加额外的功能,传统的编程模式,需要写一个之类继承它,并重新实现类的方法
  3. 使用装饰模式,仅需在运行时添加一个装饰对象即可实现,可以实现最大的灵活性

    阅读全文 »
1…456…8
echo-ding

echo-ding

纸上得来终觉浅,绝知此事要躬行。

44 日志
26 分类
54 标签
GitHub E-Mail 微博 知乎
Links
  • bunao
© 2019 echo-ding
由 Hexo 强力驱动 v3.3.7