Linux下PHP插件自动编译脚本

注意:如果你不是闲的蛋疼,你可以用apt或者yum等包管理自动安装。。。

需要手动安装的看这里Linux下手动编译为PHP添加扩展

首先,必须的按照那篇文所说,先准备好源码包,然后在ext目录里建立build.sh文件加入脚本内容(或者直接下载本文附件)

脚本内容中需要自行替换的部分有

  1. sourceDir=插件源码目录ext路径(必须以/结尾)
  2. phpDir=PHP安装目录(必须以/结尾)
  3. extension_dir=PHP插件目录(必须以/结尾,不知道请用phpinfo看)
阅读更多...

Linux(Ubuntu) 下时区的修改方法

刚搞到一台HK的Ubuntu,花了N小时一个个配置好nginx+php+mysql+redis环境之后,才想起有一键安装包这种东西ORZ。。

本文内容于Ubuntu14.04下尝试,不保证本文内容在其他版本的Linux下适用。

言归正传,发现默认的时区是GMT+000,每次看时间不对,很不爽有木有

更改方法如下:
(我是在root下执行的,如果不能正确设置,请尝试使用切换到root用户或使用sudo命令)

阅读更多...

vim更改字体

#vim 更改字体
配置文件中加入 set guifont=字体名:字号
字体名如果带有空格或者其他特殊字符,需要加上\转义符

1
set guifont=Source\ Code\ Pro:h10

win10报告字体文件无效问题

win10 提示字体文件无效

今天安装字体结果死活报告字体文件无效。。
以为是网络抽风(从境外网站下载因为众所周知的原因)或者是格式不兼容,然后重新下载了好几遍。。
最后搜了下,发现win10相同情况的很多,
解决方案:开启被禁用的windows firewall服务。
(巨硬特技还真是炫酷啊,搞个字体防火墙也要来插一脚)

【2015.09.27】C++学习笔记

一元运算符重载

  • 友元重载与成员重载
    • 友元重载:
      1
      2
      3
      4
      5
      6
      7
      8
      class Aclass()
      {
      friend bool operator== (Aclass &objectA, Aclass &objectB);
      };
      bool &operator++(Aclass &object)
      {
      //do something..
      }
    • 成员重载:
      1
      2
      3
      4
      5
      6
      7
      8
      class Aclass()
      {
      public:
      bool operator==(Aclass & objectB)
      {
      //do something..
      }
      };
  • 索引运算符[]必须使用成员函数重载
  • ++运算符前置与后置的区分: 前置operator++() 后置operator++(int)

模板

  • 在声明一个 template type parameter(模板类型参数)的时候,class 和 typename 意味着完全相同的东西,可以随意混用。
    • template<class T> class Widget; // uses "class" template<typename T> class Widget; // uses "typename"
      以上完全相同
  • 一个 template(模板)中的依赖于一个 template parameter(模板参数)的名字被称为 dependent names(依赖名字)。 当一个 dependent names(依赖名字)嵌套在一个 class(类)的内部时,我称它为 nested dependent name(嵌套依赖名字)。嵌套依赖名字必须显式使用typename关键字声明其为type,否则将不被认为是type。
    • template<typename C> void print2nd(const C& container) {   C::const_iterator * x;   ... }
      如不使用typename声明,将被认为是C中的static member(静态成员)const_iterator与某个已存在的x进行*运算相乘),如果要声明x为C内的nested dependent name(嵌套依赖名字),必须显式使用:typename C::const_iterator * x; 1
  • 模板参数也可以不使用typename而接受普通值,如template<typename C, int value>,可用于类模板,如
    1
    2
    3
    4
    5
    6
    template<typename C, int value>
    class AClass{
    private:
    C _aC;
    const int _Avalue = value;
    };
  • 类模板,成员函数在类声明外定义时,必须在每个函数前加上template信息,例如
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    template<typename C, int value>
    class AClass{
    public:
    void aFunction(int aParm);
    private:
    C _aC;
    const int _Avalue = value;
    };

    template<typename C, int value>
    void AClass<C, value>::aFunction(int aParm)
    {
    }
  • 模板代码不能分离编译(不能分成.h和.cpp,必须根据需要全部写在.h或.cpp)

【2015.09.02】C++学习笔记

  • virtual不可用于修饰函数:构造函数、static函数(不可同时使用)、inline函数(inline将被忽略)

  • virtual修饰析构函数:对一个基类指针delete,将只会调用基类析构函数,而不调用派生类析构函数,可能造成内存泄漏。解决方法:用virtual修饰 基类析构函数,将会执行基类和派生类的析构函数

  • 一个函数一旦声明为虚函数,那么不管你是否加上virtual 修饰符,它在所有派生类中都成为虚函数。但是由于理解明确起见,建议的方式还是加上virtual 修饰符。

  • 静态函数不属于任何一个类的实例,在类被加载的时候,静态函数就会被创建,他的调用是通过类名调用的

  • 先执行基类构造函数,再执行派生类构造函数。析构过程调用顺序相反。

  • 类的数据成员在析构函数执行完毕之前不会被释放

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    class B
    {
    ~B() {};
    }
    class A
    {
    public:
    ~A() {};
    private:
    B m_x;
    };

    以上代码在销毁A的实例化对象时,会先执行完毕A::A(),再执行B::B()

RTTI

  • dynamic_cast<type>(expression) 只能用于指针或引用。
    • 对指针转换失败,则返回空指针(传入空指针,会抛出std::bad_typeid异常)
    • 对引用转换失败,则抛出std::bad_cast异常
  • typeid(expression) 返回一个std::type_info的class instance`.
    • 传入空指针,则抛出std::bad_typeid异常
    • 判断类型:typeid(a) == typeid(b)
  • 一般地讲,能用虚函数解决的问题就不要用 dynamic_cast,能够用 dynamic_cast 解决的就不要用 typeid
  • Copyrights © 2014-2022 听寒
  • Visitors: | Views:

请我喝杯咖啡吧~

支付宝
微信