zoukankan      html  css  js  c++  java
  • thinkphp-1

    thinkphp网站: http://thinkphp.cn, http://bbs.thinkphp.cn

     在设置文件夹查看试图的时候, 只点" 应用到所有文件夹" 不要点"重置所有文件夹" , 那个是"重置"到默认视图!

     登录检查页面->登录成功页面: verify.php->success.php: "登录成功, 正在为你跳转..."

    过程化写网站和用框架ThinkPHP来写: 前者可能需要一个月, 后者可能需要一个星期

    需要使用框架, 只专注于业务就好. 类/方法/逻辑都考虑好了, 封装好了的. 正如你要用电脑, 你不需要自己去写一个操作系统

    你要开车, 也不需要自己去造一个车出来, 你要住房子, 也不需要自己去修房子...

    mvc?

    网站开发, 基本上都是基于/面向数据库的 web应用程序

    M: model, 基本上就是 :数据库(的一个类)

    V:view基于模板的视图

    C: controller, 就是M和V之间的桥梁. V是将请求发送到C, Controller实际上就是中间层, 是我们写的控制逻辑 php代码.

    项目的 单一 入口文件, 将程序的控制权交到 控制器手中, 以后就由 控制器来实现调度.(调度者,管理者).

    注意: view视图是不能 不应该直接和数据库打交道的

     thinkphp的版本和下载核心包还是完整包?

    现在公司用得较多的是v3.1.3

    要下载完整包, 完整包额外包含了常用的一些类: 上传类/下载类/验证码类/分页类/图形处理类等等. 核心包只有

    ThinkPHP运行必须的一些文件

     注意,  下载下来解压后的 目录名称很长如什么thinkphp_v3.13_utf8_full等等之类的 , 为了便于在项目中 在编程中引用,

    通常把目录名更改成: ThinkPHP简短的就好.

    thinkphp从哪个版本开始, 入口文件部署变化了?

    从v3.2开始, 入口文件部署变了: 整合了你要开发的项目目录, 自带了入口文件index.php, 然后, 你只要将

    你的项目放在: 和ThinkPHP同级的 Application目录中就可以了

    而v3.1.3及其之前的版本, 都是由用户自己来创建index.php, 而且这个index.php文件是放在 整个项目的跟目录下, 并且

    跟ThinkPHP文件夹同级的地方.

     如何写thinkphp项目的入口文件index.php?

    <?php

    define('APP_NAME', 'Index');

    // 注意这个应用程序 /项目 名称, 不是总的项目名称, 而是说, 你创建的这个项目是(前台项目, 还是

                                              // 后台项目,或者说是你自己定义的项目如 登录/注册项目. 一般前台项目用Index*大写*来表示

    // thinkPHP对文件名/ 文件夹名称的 大小写比较 是 严格区分的, 比较明显, 所以这里凡是 目录都首字母大写,

    // 尽量 要 跟系统内的约定 一致!!

    define('APP_PATH', './Index/); 

    // 项目路径是上面那个的路径, 在thinkphp中, 目录都要首字母大写.  而且表示目录要在结尾加/

    // 表示目录, 都要在目录名后面加 斜杠, 如果不加, 将会生成以Index为前缀的多个目录, 而不是把项目文件夹放在 Index/目录下.

    define('APP_DEBUG', TURE);

    // 这个define('APP_DEBUG', TURE); 要放在require ThinkPHP.php之前, 如果放在require语句之后, thinkphp核心都都执行完了, 还有什么用? 要事先告诉thinkphp内核.

     include  './ThinkPHP/ThinkPHP.php'; // 最好用include或者require ,不要用xxx_once, 用xxx_once效率低??

    // include或require后,  实际上"包含" 就是 "执行" , 通过执行这个thinkphp的核心模块/文件, 就生成了你的应用程序 /项目文件夹 了!

    /* APP:run(); */  这个不用再写了, 可能内核在最后就已经调用了这个run()函数了, 如果再写这个, 就会生成两个thinkphp的笑脸.

     ?>

    thinkphp经过改进, 消除Runtime目录放在其他位置的bug. 不用再写: define('RUNTIME_PATH', './Index/Runtime/');

    平级和上级目录的表示?

    对于 当前正在编辑的文件 , 和它 平级(跟它在同一个目录, 排列/ 显示 在一起的)的文件/文件夹, 引用位置都是" 当前目录./"

     对于 当前正在编辑的文件 , 和它 上一级的目录( 从当前文件开始, 向上一次 可以显示)的文件/ 文件夹, 引用位置:"../"

    Fatal error: Allowed memory size of 8388608 bytes exhausted (tried to allocate 35 bytes) in C:wampwww hinkThinkPHPCommoncommon.php on line 657

    是说在 "一个" php脚本:common.php中,  内存的极限为8M被用完: 改为: memory_limit = 256M

    thinkphp的控制器放在什么地方?

    Controller就是Action :  放在  Index/Lib/Action/ IndexAction.class.php中.

    控制器实际上, 是一个类, 继承自 Action的一个 XxxAction的一个类, 其控制功能就是通过里面的函数方法来实现(调控/路由的).

    注意, 生成的Index "项目"基本上跟ThinkPHP的目录相同 , 只是thinkphp中的Extend目录被Runtime目录所替代,

    其他如:Common,Config,Lang, Lib,  Tpl都有.

    但是, 项目Index下的目录一般都是空的!

    形成自己的规则和套路?
    套路很重要, 免得你迷惑, 是你轻松愉快 + 高效率

    如: thinkphp的驼峰命名法,  文件夹/文件单数命名法, 大括号的书写风格...

     php的类和c++的类 new的不同?

    c++的类实例, 只有类中 存在 带参构造函数的时候, 才用new Foo(10, 'abc'); 否则就不能带括号: new Foo

    而php的类实例化, 不管是否有带参构造函数, 都必须带括号: $obj = new $control(); 

    而且php的类名  和 函数名  , 支持 变量 替换...

    $_GET等全局变量, 不但使用其成员: $_GET['name'],  而且使用/打印 其本身 也是较多的: print_r($_GET);

    thinkphp单入口的运行方式?

    单入口文件index.php 相当于: 

    <?php

     $control = isset($_GET['m']) ? $_GET['m'] : 'Index';

     $action = isset($_GET['a']) ? $_GET['a'] : 'index';

    $obj = new $control();

    obj -> $action();

    class IndexAction() {   // Action是后缀, 主要是为了和 Model表示数据库的后缀相区别!

         public index(){

              echo "Index index";

    }

         public show(){

             echo "Index show";

    }

    }

    实际上, 是调用单入口文件index.php的 get方法 传参 m="(实例化)控制器 类"  & a="方法".  控制器首字母大写, 而方法总是 全小写

     .....

    一个控制器中的方法, 就对应/代表 着一个 view的页面

    而一个控制器, 就相当于 项目中的一个 "逻辑/ 功能 模块"!如 首页模块, 登录模块, 分页模块, 会员中心, 搜索页等等.

    ?>

    defined不用if?

    因为defined是函数调用, 有bool类型的返回值, 所以在判断某个常量是否 被定义时, 直接使用 defined, 而不必用 if(defined(...)).

     最常用的:  defined('APP_NAME') or define('APP_NAME', 'Index');

    thinkphp v3.1.3需要的php最低版本?

    defined('THINK_PATH') or exit();

    if(version_compare(PHP_VERSION,'5.2.0','<'))  die('require PHP > 5.2.0 !');
    //  版本信息
    define('THINK_VERSION', '3.1.3');
    php除了自定义常量外, 还可以使用 系统 预先定义 的系统常量(可以直接使用...):

    : __FILE__, __LINE__, PHP_VERSION, PHP_OS, TRUE ,FALSE

    E_ERROR, E_WARNING, E_PARSE.

    常量的使用, 可以直接用常量名,   也可以constant( $constant_var), 后者更灵活, 可以带表示常量的变量...

    需要自己创建轮子吗?

    摒弃 "英雄主义", 这个世界不是哪一个人的能力把人类发展到现在的程度的, 谁都不是上帝, 而是所有人的智慧的结晶

    所以, 不必想自己去创造一切, 什么东西都要自己从原始 社会建设做起, 所以, 完全不必 自责计算机里的东西不是自己创造的,

    "就算windows也不是比尔一个人创造的, linux也不是linus一个人创造的", 所以, 不要感到羞愧! 不要想做"英雄"主义.

    不要为自己 使用 "工具" 而感到自责羞愧. 这些都是"人类社会"的智慧结晶.

    不要去管" 工具 是否简陋", 界面是否"美观", 只要较好的/高质量的 "完成功能" 就好. 电脑仅仅只是 工具!

    一切都是为了高效率和方便

     

    HTML 表单并不传递整数、浮点数或者布尔值,它们只传递字符串。

    要想检测一个字符串是不是数字,可以使用 is_numeric() 函数

    php的TRUE 和FALSE?

    true和false 是php的关键字 , 而TRUE和FALSE是php的预定义的常量. 随便写哪个都可以.

    thinkphp默认没有开启APP_DEBUG?

    因为在开发阶段, 代码经常要随时修改, 为了能够及时看到修改后的结果, 所以要开启define('APP_DEBUG', TRUE);

    而上线后, 网站已经开发好了,  不会再修改了, 所以为了网站的响应更快, 不必每次都去解释执行, 所以就做了Runtime/~runtime.php

    的编译, 响应请求时, apache引擎直接读取这个~runtime.php这个缓存文件.

    当然, 不是每个php文件都会编译缓存 , 如控制器下面的 action方法好像就没有缓存, 而Config/config.php文件就预编译缓存了的.

    TinkPHP.php中的以默认的是没有开启调试的 : defined('APP_DEBUG')     or define('APP_DEBUG',false);

     model和module的区别?

     model :[ˈmɑdəl] 

    adj. 模范的;典型的 the model teacher, the model example
    n. 模型;模式;典型;模范;模特儿;式样
    v. 模拟;模仿;做模特儿;做模型;塑造

    module: 美[ˈmɑdʒˌul]

    n. 单元,组件;舱;模块

    所以, 一般在php, thinkphp中用的都是 model. 表示模型的意思:表对应一个类, 表的记录对应一个类实例.

    ThinkPHP的Conf和项目的Conf配置文件的区别?

    ThinkPHP中的Conf是对全局的配置, 包括: alias.php, convention.php(注意是惯例,不是"方便的"), debug.php, tags.php

    而项目的Conf/配置文件则是: config.php. 

    一般, 配置文件的写法就是: return array(.....);

    一般, 是修改"项目的"配置文件, ThinkPHP自带的配置文件一般不修改??

    thinkphp的项目默认访问路径?

    默认的是:localhost/think/index.php?m=Index&a=index, 所以, 可以只写localhost/think/

    这里的m 是指的 "是前台模块" 还是 "后台 Admin 模块".

    echo输出字面值时的处理

    echo var_name; 

    会首先搜索var_name是不是一个常量, 如果没有搜索到, 才会直接输出字符串"var_name", 所以, 要养成如果是字符串就要

    带上引号的 习惯.

     

    ---------------------------------------------------------------------

    查看thinkphp的版本?

    {$Think.version}: 在html中,使用TagLibs, 不是使用<>, 而是使用{}. 这样做, 是为了 和 html标签 相区别!  同时, 也让标签库引擎就能知道识别了!

  • 相关阅读:
    【AppScan心得】IBM Rational AppScan 无法记录登录序列
    tomcat记录XForwardedFor字段中的远程IP
    【AppScan深入浅出】修复漏洞:会话标识未更新(中危)
    用java在Windows控制台输出utf8字符
    【图解漏洞】图解跨站脚本攻击(XSS)原理
    【图解漏洞】图解跨站请求伪造(CSRF)原理(之二)
    雅克比矩阵(Jacobian Matrix)在正运动学中的应用
    游戏物理引擎之静态碰撞
    万向节死锁(Gimbal Lock)
    旋转矩阵(Rotate Matrix)的性质分析
  • 原文地址:https://www.cnblogs.com/bkylee/p/5244065.html
Copyright © 2011-2022 走看看