• thinkphp学习笔记13-15集


    13集: ThinkPHP3.1.3使用视频教程--后台登录验证与自动运行方法_标清.flv
    14集: ThinkPHP3.1.3使用视频教程--自定义SESSION处理DB驱动与添加Redis处理驱动_高清.mp4
    15集: ThinkPHP3.1.3使用视频教程--通过后台管理许愿墙贴子与分页类的使用_高清.mp4

    在editplus中 编译IndexAction.class.php文件时, 会提示" cannot find class 'Action'"?

    这是因为, 你直接编译 / 直接访问的是 IndexAction.class.php 文件本身!
    不能这样访问IndexAction.class.php本身文件, 要通过 入口文件 index.php/Index/Index/index来访问!

    判断是否通过 登陆 进入后台页面的方法?

    可以通过IS_POst, 或者通过判断 if(!isset($_SESSION['uid'] || !isset($_SESSION['username'])), 在登陆页面写入 session.
    关于!的使用: 在判断if(...)的时候, 直接写, 如果要判断 "没有..., 不是..."的时候, 就直接在原来 的条件前面加!.
    ||: 表示两者当中的任意一个条件的时候, 用或/

    也可以在后台 对应的 类 IndexAction 等 都继承自 CommonAction, 而不是继承自基类 Action,
    在CommonAction中写自动函数:
    public function _initialize(){...} // initialize前只有一个下划线
    然后在_initialize()方法中去判断是否是通过登陆页面进入的, 就去判断是否设置了 $_SESSION['id']等变量, 否则就跳转到登陆页面...

    thinkphp中删除session?

    用session_unset();
    session_destroy();

    判断字符串中是否包含子字符串(子字符)? int index= strpos($hay, $needle); 从函数名称都可以看出来... // 不能用false来判断, 要用= 来判断
    截取子字符串: substr($str, $start, $length)...
    c/c++系列的{大括号通常是单独占一行, java, php系列的大括号{ 通常是在一行 的 末尾!
    if(){}else{} ... if(){} elseif(){}

    Dreamweaver设置文件编码: 默认的是utf-8编码, unicode 标准化表单: c(规范分解, 后跟规范合成)

    将session不存入文件而是写入数据库?

    默认的处理session是放在 .../wamp/tmp下的
    tp处理session是在函数 THINK_PATH/common/functions.php中

           if(C('SESSION_TYPE')) { // 读取session驱动  // 在自定义conf中配置:  'SESSION_TYPE'=> 'Db' 必须这样设置, 因为系统中只定义了SessionDb类
                $class      = 'Session'. ucwords(strtolower(C('SESSION_TYPE')));
                // 检查驱动类
                if(require_cache(EXTEND_PATH.'Driver/Session/'.$class.'.class.php')) {
                    $hander = new $class();  // 生成了SessionDb 类
                    $hander->execute();
                }else {
                    // 类没有定义
                    throw_exception(L('_CLASS_NOT_EXIST_').': ' . $class);
                }
            }
            // 启动session
            if(C('SESSION_AUTO_START'))  session_start();
    

    所以将session写入数据库的步骤就是:

    1. 配置 'SESSION_TYPE'=> 'Db',
    2. 创建session表 包含前缀: hd_session....
    3. 然后就是往 "$_SESSION['username']中写数据

    ucwords ucfirst lcfirst

    这些都是php本身自带的内置的函数:
    ucwords('hello world'); // output is: Hello World
    ucfirest('hello world'); Hello world
    lcfirst('HELLO WORDL'); // hELLO WORDL

    函数G写法的借鉴

    在函数内部用static 关键字, 变量名的风格是: $_xxxx.

    function G($start,$end='',$dec=4) {
        static $_info       =   array();
        static $_mem        =   array();
        if(is_float($end)) { // 记录时间
            $_info[$start]  =   $end;
        }elseif(!empty($end)){ // 统计时间和内存使用
    .........other codes/////
    
    /**
     * 优化的require_once
     * @param string $filename 文件地址
     * @return boolean
     */
    function require_cache($filename) {
        static $_importFiles = array();
        if (!isset($_importFiles[$filename])) {
            if (file_exists_case($filename)) {   // file_exists_case()区分大小写的来判断文件是存在.
                require $filename;
                $_importFiles[$filename] = true;
            } else {
                $_importFiles[$filename] = false;
            }
        }
        return $_importFiles[$filename];
    }
    

    页面布局版式上 注意 "内容横向上的长度 要控制, 适当的 多向纵向排列 :: 布局上不用table, 而在内容表现上可以考虑多采用表格/图表/图片的手段" 的用法

    表格的内容可以实现 分组: thead, tbody, tfoot, 如果这样使用的话, 表格总是从 头/body/foot的顺序显示, 而不管他们书写的先后顺序
    每个分组都要包含完整的 tr>...td>.../td> /tr>

    <table border="1">  
      <thead>  
        <tr>  
          <th>Month</th>  
          <th>Savings</th>  
        </tr>  
      </thead>  
      <tbody>  
        <tr>  
          <td>January</td>  
          <td>$100</td>  
        </tr>  
       </tbody>  
      <tfoot>  
        <tr>  
          <td>Sum</td>  
          <td>$180</td>  
        </tr>  
      </tfoot>  
    </table> 
    

    *{margin:0;padding:0}的写法叫css reset, 据说有性能问题...

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

    tp如何写Redis 的session存储机制?

    php的函数命名: 总是以某一类 / 要处理的对象关键字 / 等开头...

    user-level自定义的session storage 机制:

    session_set_save_handler(...)

    这里有两个函数:
    call_user_func()调用回调函数: 可以是全局函数, 也可以是类的静态/非静态方法.

    有些诸如 call_user_function() 或 usort() 的函数接受用户自定义的函数作为一个参数。Callback 函数不仅可以是一个简单的函数,它还可以是一个对象的方法,包括静态类的方法。 
    一个 PHP 函数用函数名字符串来传递。可以传递任何内置的或者用户自定义的函数,除了语言结构如 array(),echo(),empty(),eval(),exit(),isset(),list(),print()和 unset()。 
    一个对象的方法以数组的形式来传递,数组的下标 0 指明对象名,下标 1 指明方法名。 
    对于没有实例化为对象的静态类,要传递其方法,将数组 0 下标指明的对象名换成该类的名称即可。
    

    session_set_save_handler(callback $open....)的参数是回调函数. 由于这里调用的回调是类的方法, 所以采用数组的方式, 数组的第一元素是: 类名: 类名要是传引用; 第二个元素是 回调的函数名或方法名, 所以就是:
    array(&$this, 'open'), array(&$this, 'close'),.....

    session的处理机制有6个方法, 分成3组:
    open($id, $name), close()| read($id), write($id, $data)|destroy($id), gc($maxLifeTime).

    对于分组项目, 链接跳转地址的写法:

    href={:U('Admin(分组)/MsgManager(控制器 模块)/index(方法))}

    对于分组项目, 链接跳转地址的写法:

    href={:U('Admin(分组)/MsgManager(控制器 模块)/index(方法))}

    
    ### thinkphp中引入css文件?
    
    
    
    使用css标签: <css file='__PUBLIC__/Css/public.css' />
    使用js标签 <js file='__PUBLIC__/Js/public.js' />
    
    
    ### tp中如何使用分页类?
    
    <font color="red">
    ## // 这里直接就写 ORG开始了, 包括tp的很多地方, 系统在 内部 都已经规定了 路径的前面部分(前缀) 所以写路径的时候, 就直接按照tp的规定 写后面的路径部分就可以了.</font>
    ### 首先要导入 分页类: import('ORG/Util/Page');	 // tp自动就设置了导入类库的路径是: Think_Path/Extend/Library/ 
    
    Page类的new:  如果类有同名的函数则new时调用那个同名函数, 否则就调用 __construct函数.
    Page的__construct构造函数需要两个变量: $totalRows, $listRows
    
    Page类的成员变量.
    有public成员 : $url,  $parameter,  $firstRow, $listRows,  注意其他有些是 protected成员, 如$totalRows $totalPages,  $nowPage, $config等.
    
    ## 扩展的Page类中的函数?
    Page类有三个函数,  
    1. 一个是Page类的构造函数 __construct
    2. 一个是设置Page的保护成员$config的: setConfig. 因为可以在$config中 自定义的加入你要显示提示内容等等
    3. 一个就是最重要的show( )函数, 它返回在 分页页面的最低处要显示的 字符串内容, 是通过 str_replace($this->config['theme']...)中的相关内容来实现的,你可以返回这个字符串, 并把它分配到 模板页.
    
    ## 使用左右alt键 的方法是:  放在空格键上的 左右大拇指!
    
    ## 方法页面的变量 必须经过分配后, 才能在模板页使用输出, 这是为了安全! 但是分配的方法有两种:一是使用assign, 另一种是使用$this->tpl_var = $var. 感觉后一种方法更直接!! 能够识别和习惯使用这种直接输出的方式: 实际上当前类中, 是没有定义这样的 成员变量的, 所以这种写法就是这样的...
    <font color="red">而且可以分配多个变量, 写多个$this-> var1 = $var1; $this->var2 = $var2 而assign要通过数组来分配多个模板变量 </font>
    
    M方法中, 最后的应该是select方法, 倒数接着是: limit, 再接着是order等...顺序不应该乱!
    
    
    ##在thinkphp中 有的地方写 点语法不行, 比如在模板页使用传递过来的变量时, 就不能用点语法来写哦.  但是, 数组的写法总是可以的, 所以为了安全起见, 建议
    数组/对象? 都用 [] 中括号数组的写法形式.
    
    
    关于NULL的写法:  有些时候可以写成为null, 但是写成NULL是一定可以的, 也推荐写成NULL
    
    编程中 关于加不加引号的问题?
    一个核心, 一个宗旨就是 :   主要是进行分析语义:   
    函数, 只有当在调用的时候, 它表示是一个函数的时候, 才直接用, 不加引号
    数字变量, 只有当它表示数字的时候, 才直接使用, 不加引号:  0和"0", 前者表示数字数值0, 后者表示字符0.
    true/false, 只有当它表示 逻辑值时,  才直接使用, 不加引号.
    
    等等.....
    其他所有的地方,  根据语义分析, 凡是不是表示 其本义 的时候, 只是 引用/表示 它的名称的 时候, 都使用 字符串, 用引号括起来!!
    
    
    thinkphp有两个重要的函数文件:
    common.php是tp的 基础函数库
    functions.php 是tp的标准模式下的 公共函数库.
    ****** 借鉴tp的设计思想:  设计一个函数时, 为了减少函数的个数, 尽量扩展/增加函数的功能! 那就是适当增加函数的参数, 在一个函数中可以实现多个/多种 功能! 如success和error, 除了显示提示信息时, 还可以 指定跳转地址:
    
    success($message, [$jumpUrl], [$ajax])...
    
    记住: success和error是Action类的方法, 因为它是表示 Action类中操作/方法 是否成功的/失败的 情况, 所以不是全局函数.
    
    Db.class.php中的数据库类中的delete函数方法, 中的变量, 可以是数组, 如果是删除的主键, 可以直接传递该主键 , 如:
    M('wish')->delete($id);  传统的方法是: M('wish')->where(array('id'=>$id))->delete();
    
    U方法:  在php文件中, 就可以直接调用它就可以了, 在模板中要用: {:U('..')}...
    
    U方法中地址的写法:
    如果是 非分组, 就直接写方法名称(在本模块内部)
    如过是 分组, 只有一个入口文件, 就要写完整: U('分组名称/模块名/方法名称')
    
    
    
    
    
    
    
    
    
    ###
  • 相关阅读:
    bzoj 2213: [Poi2011]Difference
    51nod 1079 中国剩余定理
    51nod 1074 约瑟夫环 V2
    SpringBoot:第二篇 集成mybatis
    SpringBoot:第二篇 集成日志lombok
    SpringBoot:第一篇 新建spring boot 应用
    JVM常用内存参数配置
    深入研究Java GC
    应用性能监控分析
    Java -- 深入浅出GC自动回收机制
  • 原文地址:https://www.cnblogs.com/bkylee/p/5408545.html
Copyright © 2020-2023  润新知