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:\wamp\www\think\ThinkPHP\Common\common.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标签 相区别!  同时, 也让标签库引擎就能知道识别了!

 

posted @ 2016-03-05 08:17  noitanym  阅读(288)  评论(0编辑  收藏  举报