PHP 进阶篇:面向对象的筹划基准,自动加载类,类型指示,traits,命名空间,spl的利用,反射的采纳,php常用设计格局 (大豆学员 第贰等级)

 

其三方的选拔,第②方应用

1. MMDrawerController  抽屉效果
2.SVProgressHUD  透明指示层
3.SDCycleScrollView 无限轮播器
4.SDWebImage 异步图片加载
5.RESideMenu 抽屉效果
6.AFNetworking 网络请求
7.MJRefresh tableView上下拉刷新
8.MJExtension json转模型
9.Masonry 布局适配框架
10.UMengSocial 友盟SDK
11.TPKeyboardAvoiding 键盘与输入框的位置修改
12.XYPieChart 饼状图
13.UUChartView 折线图
14.IQKeyboardManager 输入框在键盘弹出的时候处理显示位置

1. MMDrawerController
抽屉效果 2.SVProgressHUD 透明提示层 3.SDCycleScrollView 最为轮播器
4.SDWebImage 异步图片加载 5.RESide…

前言

宏在C/C++中有挺大的功力。

关键词

 

立异模块

咱俩得以采纳以下命令更新模块:

$ npm update express

 ==============================================

宏的三种效应

1,定义常量

2,定义表明式

3,简化繁琐的代码

4,作为标识符

5,可变参数

6,#和##的使用

 

1,定义常量

比如说定义PI的值可以经过宏来定义

#define PI    3.1415927

2,定义表达式

#define MAX(a, b)    (a>b?a:b)

3,简化繁琐的代码

本条可以简化一些再一次的代码,比如注解函数,定义类的分子变量,只怕是简化数10遍编制重复性高的代码。

简化函数申明,在函数申明的时候有点须要的根本字须求写,可是众多时候都以一模一样的,可以经过宏来简化

定义线程函数

unsigned __stdcall ThreadFunc(void* pArguments)

可以经过宏简化为

#define THREAD_FUNC(func)    unsigned __stdcall func(void* pArguments)

THREAD_FUNC(ThreadFunc)
{
    printf("hello\n");
    return 0;
}

 

定义类的成员变量,恐怕必要定义成员变量的get,set函数,那时候可以经过宏来简化那些进度。

#define PROP_DECL(ClassName, Prop)    \
    public: ClassName Get##Prop(void){return m_##Prop;}\
    public: void Set##Prop(ClassName vl){m_##Prop = vl;}\
    private: ClassName m_##Prop;

class CTestObj
{
    PROP_DECL(int, Count)
public:
    CTestObj();
    ~CTestObj();
};

地方的代码通过预编译之后就会生出GetCount和SetCount多个函数和m_Count私有成员变量。

简化繁琐代码,在内存释放的时候或然必要把指针,须求两行代码

WA *pa = new WA(c);
delete pa;
pa = NULL;

可以采用宏来简化那么些历程

#define MEM_FREE(x)    do \
{\
    delete x;\
    x = NULL;\
} while (0)

WA *pa = new WA(c);
MEM_FREE(pa);

在ATL,MFC中大批量采纳到宏来简化代码。

4,作为标识

用作标识的宏在大量的采用

#ifndef __TMP_H__    //判断是否已经定义宏,如果没有,将会执行下面代码,用于避免包含文件的时候重复包含
#define __TMP_H__    //定义宏,这样第二次包含这个头文件的时候就不会执行下面的定义

//判断是否是UNICODE,用于定义TTCHAR的字符类型。
#ifdef UNICODE        
typedef wchar_t TTCHAR;
#else
typedef char TTCHAR;
#endif

//用于标识的宏定义
#define    IN
#define OUT

#endif // !__TMP_H__

 

4,可变参数

宏可以有参数,而且参数数量得以不定

#define LOG(format, ...)    printf(format, __VA_ARGS__)

LOG("hello, %d, %s\n", 10, "nihao");

5,#和##的使用

#的意义是把宏参数变成字符串

#define STR(s)     #s
printf(STR(hello));           // 输出字符串"hello"

##的效率是把宏参数粘贴起来例子能够参照一下第②点的代码。

 

运用宏须要留心的点

宏是在预处理进程中开展存文本替换,预处理进度中不会对宏进行任何的语法检测,却个括号,少个支行都不会管,所以或然会现出局部很想得到的不当,所以要慎用。

1,算法优先难题

二个乘法的宏

#define MUL(x, y)    (x * y)

MUL(2,3)的时候从不难题,若是是MUL(1+2,
3)的时候就出事了,宏会替换到1+2*3,跟预想的结果就差异了。

此时就须求把宏定义改成

#define MUL(x, y) (x) * (y)

2,分号吞噬难点

#define SKIP_SPACES(p, limit)  \
     { char *lim = (limit);         \
       while (p < lim) {            \
         if (*p++ != ' ') {         \
           p--; break; }}}

一经地点的代码放在判断语句中使用

if (*p != 0)
   SKIP_SPACES (p, lim);
else ...

编译器会报错,else从前要有if,可以因此上面代码来解决

#define SKIP_SPACES(p, limit)     \
     do { char *lim = (limit);         \
          while (p < lim) {            \
            if (*p++ != ' ') {         \
              p--; break; }}}          \
     while (0)

那种措施在linux中大量运用到

 

3,重复调用

#define min(X, Y)  ((X) < (Y) ? (X) : (Y))

假定调用时如此

int x = 1;
int y = 2;
min(x++, y);

开展后x++会被调用五回,那种艺术要幸免。

 

4,对本人的递归引用

有如下宏定义:

#define foo (4 + foo)

按前面的驾驭,(4 + foo)会进展成(4 + (4 +
foo),然后直接举办下去,直至内存耗尽。可是,预处理器拔取的方针是只进行五回。也等于说,foo只会举办成(4

  • foo),而进行以后foo的意思就要按照上下文来分明了。

对于以下的交叉引用,宏体也只会进展三回。

#define x (4 + y)
#define y (2 * x)

x展开成(4 + y) -> (4 + (2 * x)),y展开成(2 * x) -> (2 * (4 +
y))。

留神,那是极不推荐的写法,程序可读性极差。

 

5,宏参数预处理

宏参数中若包括其它的宏,那么宏参数在被代入到宏体从前会做三遍完全的举办,除非宏体中隐含#或##。

有如下宏定义:

#define AFTERX(x) X_ ## x
#define XAFTERX(x) AFTERX(x)
#define TABLESIZE 1024
#define BUFSIZE TABLESIZE

AFTELX570X(BUFSIZE)会被开展成X_BUFSIZE。因为宏体中蕴藏##,宏参数直接代入宏体。
XAFTECR-VX(BUFSIZE)会被开展成X_1024。因为XAFTE途锐X(x)的宏体是AFTECRUISERX(x),并没有#或##,所以BUFSIZE在代入前会被全然展开成1024,然后才代入宏体,变成X_1024。

 

宏实在预处理进度中被交换掉的,所以在实质上的编译进程中,不会出现宏,只怕宏的变量名。

 

参考:

前言 宏在C/C++中有挺大的听从。
关键词 宏的二种功用 1,定义常量 2,定义表达式 3,简化繁琐的代码
4,作为标识符 5,可…

大局安装与地面安装

npm
的包安装分为地面安装(local)、全局安装(global)二种,从敲的命令行来看,差异只是有没有-g而已,比如

npm install express          # 本地安装
npm install express -g   # 全局安装

假诺出现以下错误:

npm err! Error: connect ECONNREFUSED 127.0.0.1:8087

消除办法为:

$ npm config set proxy null

以下是进阶篇的内容:面向对象的宏图基准,自动加载类,类型提醒,traits,命名空间,spl的使用,反射的应用,php常用设计形式

宏的使用,使用

2. npm 的使用,npm使用

NPM是及其NodeJS一起安装的包管理工具,能缓解NodeJS代码安顿上的洋洋标题,常见的应用处境有以下两种:

  • 同意用户从NPM服务器下载外人编写的第2方包到当地使用。
  • 同意用户从NPM服务器下载并安装外人编写的授命行程序到当地利用。
  • 允许用户将协调编写的包或指令行程序上传出NPM服务器供外人使用。

鉴于新版的nodejs已经合龙了npm,所此前边npm也一并设置好了。同样能够通过输入
“npm -v” 来测试是或不是成功安装。命令如下,出现版本指示表示安装成功:

$ npm -v
2.3.0

发表评论

电子邮件地址不会被公开。 必填项已用*标注