【转】浅谈设计模式

讲一讲在工作中用到的面向对象设计模式,供大家参考,之后也会继续更新。

面向对象设计(OOD)的七大原则

在面向对象设计中,首先有这几大原则作为前提,然后在此基础之上有了各类设计模式。

开闭原则

开闭原则(Open-Closed Principle, OCP), 一个软件实体应该对扩展开放,对修改关闭。即软件实体应该在尽量不修改代码的情况下进行扩展。在该原则中,软件实体可以指一个软件模块,一个由多个类组成的局部结构或者一个独立的类。

开闭原则是面向对象的可复用设计的第一块基石,他是最重要的设计原则。为了满足开闭原则,需要对系统进行抽象化设计,抽象是开闭原则的关键。

里式替换原则

Liskov Substitution Principle(LSP),里式替换原则,该原则规定“子类必须能够替换其父类,否则不应当设计为其子类”。换句话说,父类出现的地方,都应该能够由其子类代替。所以子类只能去扩展基类,而不是隐藏或则覆盖基类。

继续阅读【转】浅谈设计模式

【转】PHP编码规范

文件标记

所有PHP文件,代码标记均使用完整的PHP标签,不建议使用短标签。

<?php
  echo 'Hello world';
?>

<?
  //短标签不推荐
  echo 'Hello world';
?>

 文件格式

文件编码 为无 BOM 的 UTF-8。

纯PHP类文件,文件最后 ?> 要省略。

TextMate

在 “文件编码” 中,选择 “UTF-8(推荐)”在 “换行符” 中,选择 “LF(推荐)” 继续阅读【转】PHP编码规范

Yii分页的使用

1、Controller中action

<?
use yii\data\Pagination;
....
public function actionList()
{
  $query = Article::find()->where(['status' => 1]);
  $countQuery = clone $query;
  $pages = new Pagination(['totalCount' => $countQuery->count()]);
  $models = $query->offset($pages->offset)
      ->limit($pages->limit)
      ->all();
  return $this->render('index', [
      'models' => $models,
      'pages' => $pages,
   ]);
}

默认分页的数量是20,你可以设置pageSize为你想要的

$pages = new Pagination([ 
    'totalCount' => $totalCount, 
    'pageSize' => 5, 
]);

继续阅读Yii分页的使用

Yii2数据库操作

1、常用查询

// WHERE admin_id >= 10 LIMIT 0,10
 User::find()->select('*')->where(['>=', 'admin_id', 10])->offset(0)->limit(10)->all()
// SELECT `id`, (SELECT COUNT(*) FROM `user`) AS `count` FROM `post`   
 $subQuery = (new Query())->select('COUNT(*)')->from('user');    
 $query = (new Query())->select(['id', 'count' => $subQuery])->from('post');
// SELECT DISTINCT `user_id` ... 
 User::find()->select('user_id')->distinct();

2、更新操作

//update();
//runValidation boolen 是否通过validate()校验字段 默认为true 
//attributeNames array 需要更新的字段 
$model->update($runValidation , $attributeNames);  

//updateAll();
//update customer set status = 1 where status = 2
Customer::updateAll(['status' => 1], 'status = 2'); 

//update customer set status = 1 where status = 2 and uid = 1;
Customer::updateAll(['status' => 1], ['status'=> '2','uid'=>'1']);

//updateAllCounters()在数据库值的基础上进行操作

Customer::updateAllCounters(['age' => 1]); //增加所有年龄字段加1


继续阅读Yii2数据库操作

Yii2数据库查询实例

1、findOne()和findAll():

// 查询key值为10的客户
$customer = Customer::findOne(10);
$customer = Customer::find()->where(['id' => 10])->one();
// 查询年龄为30,状态值为1的客户
$customer = Customer::findOne(['age' => 30, 'status' => 1]);
$customer = Customer::find()->where(['age' => 30, 'status' => 1])->one();
// 查询key值为10的所有客户
$customers = Customer::findAll(10);
$customers = Customer::find()->where(['id' => 10])->all();
// 查询key值为10,11,12的客户
$customers = Customer::findAll([10, 11, 12]);
$customers = Customer::find()->where(['id' => [10, 11, 12]])->all();
// 查询年龄为30,状态值为1的所有客户
$customers = Customer::findAll(['age' => 30, 'status' => 1]);
$customers = Customer::find()->where(['age' => 30, 'status' => 1])->all();

继续阅读Yii2数据库查询实例

Yii实用技巧

1、如何禁止加载Yii自带的jQuery、bootstarp、bootstarp插件

//禁止加载jquery.js
'assetManager' => [
    'bundles' => [
        'yii\web\JqueryAsset' => [
            'js'=>[]
        ],
    ],
],
//禁止加载bootstarp.js、bootstarp.css
'assetManager' => [
    'bundles' => [
        'yii\bootstrap\BootstrapPluginAsset' => [
            'js'=>[]
        ],
    ],
],
'assetManager' => [
    'bundles' => [
        'yii\bootstrap\BootstrapAsset' => [
            'css' => [],
        ],
    ],
],

添加在应用的配置文件中的components中。 继续阅读Yii实用技巧

Yii2小部件的创建与使用

在做项目的时候经常会遇到某一块内容会在视图中重复使用,在Yii2中为我们提供了小部件让我们可以轻松实现重用视图的使用与配置。

Yii2本身提供了很多比较优秀的小部件工具,比如yii\widgets\ActiveForm, [yii\widgets\Menu|menu]]以及bootstarp的一些小部件。而且我们还可以非常轻松的创建自定义小部件。 继续阅读Yii2小部件的创建与使用

Mysql配置文件注释

# 以下选项会被MySQL客户端应用读取。
# 注意只有MySQL附带的客户端应用程序保证可以读取这段内容。
# 如果你想你自己的MySQL应用程序获取这些值。
# 需要在MySQL客户端库初始化的时候指定这些选项。

# For advice on how to change settings please see
# http://dev.mysql.com/doc/refman/5.7/en/server-configuration-defaults.html
# *** DO NOT EDIT THIS FILE. It’s a template which will be copied to the
# *** default location during install, and will be replaced if you
# *** upgrade to a newer version of MySQL.

# mysqld程序 继续阅读Mysql配置文件注释