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/');
平级和上级目录的表示?
对于 当前正在编辑的文件 , 和它 平级(跟它在同一个目录, 排列/ 显示 在一起的)的文件/文件夹, 引用位置都是" 当前目录./"
对于 当前正在编辑的文件 , 和它 上一级的目录( 从当前文件开始, 向上一次 可以显示)的文件/ 文件夹, 引用位置:"../"
是说在 "一个" 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();
// 版本信息
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一个人创造的", 所以, 不要感到羞愧! 不要想做"英雄"主义.
不要为自己 使用 "工具" 而感到自责羞愧. 这些都是"人类社会"的智慧结晶.
不要去管" 工具 是否简陋", 界面是否"美观", 只要较好的/高质量的 "完成功能" 就好. 电脑仅仅只是 工具!
一切都是为了高效率和方便
要想检测一个字符串是不是数字,可以使用 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]
n. 模型;模式;典型;模范;模特儿;式样
v. 模拟;模仿;做模特儿;做模型;塑造
所以, 一般在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标签 相区别! 同时, 也让标签库引擎就能知道识别了!