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/');
平级和上级目录的表示?
对于 当前正在编辑的文件 , 和它 平级(跟它在同一个目录, 排列/ 显示 在一起的)的文件/文件夹, 引用位置都是" 当前目录./"
对于 当前正在编辑的文件 , 和它 上一级的目录( 从当前文件开始, 向上一次 可以显示)的文件/ 文件夹, 引用位置:"../"
是说在 "一个" 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. 模拟;模仿;做模特儿;做模型;塑造
module: 美[ˈmɑdʒˌul]
所以, 一般在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标签 相区别! 同时, 也让标签库引擎就能知道识别了!
thinkphp-1的更多相关文章
- 制作类似ThinkPHP框架中的PATHINFO模式功能
一.PATHINFO功能简述 搞PHP的都知道ThinkPHP是一个免费开源的轻量级PHP框架,虽说轻量但它的功能却很强大.这也是我接触学习的第一个框架.TP框架中的URL默认模式即是PathInfo ...
- 在 SAE 上部署 ThinkPHP 5.0 RC4
缘起 SAE 和其他的平台有些不同,不能在服务器上运行 Composer 来安装各种包,必须把源码都提交上去.一般的做法,可能是直接把源码的所有文件复制到目录中,添加到版本库.不过,这样就失去了与上游 ...
- ThinkPHP+Smarty模板中截取包含中英文混合的字符串乱码的解决方案
好几天没写博客了,其实有好多需要总结的,因为最近一直在忙着做项目,但是困惑了几天的Smarty模板中截取包含中英文混合的字符串乱码的问题,终于解决了,所以记录下来,需要的朋友看一下: 出现乱码的原因: ...
- ThinkPHP 模板substr的截取字符串函数
ThinkPHP 模板substr的截取字符串函数在Common/function.php加上以下代码 /** ** 截取中文字符串 **/ function msubstr($str, $start ...
- thinkphp数据的查询和截取
public function NewsList(){ $this->assign('title','news'); $p = I('page',1); $listRows = 6; $News ...
- [转]thinkphp 模板显示display和assign的用法
thinkphp 模板显示display和assign的用法 $this->assign('name',$value); //在 Action 类里面使用 assign 方法对模板变量赋值,无论 ...
- [转]ThinkPHP中实例化对象M()和D()的区别,select和find的区别
1.ThinkPHP中实例化对象M()和D()的区别 在实例化的过程中,经常使用D方法和M方法,这两个方法的区别在于M方法实例化模型无需用户为每个数据表定义模型类,如果D方法没有找到定义的模型类,则会 ...
- Kindeditor在ThinkPHP框架下的使用
1.简单调用Kindeditor的图片上传功能: a.Html部署图片预览,记录图片上传成功之后的路径,以及上传图片点击按钮 <tr> <td>活动图片:</td> ...
- 在thinkphp中,写的博文标签多对多关系的标签频率统计算法
常常看到别人的博客里面,或者网站里面有这样随机颜色,但字体大小与标签出现频率有关的标签云,于是自己就想写一个.至于颜色的随机显示,那就很简单了,这里就不列代码. 因为正在学thinkphp,所以数据查 ...
- thinkphp怎么修改配置进入默认首页
thinkphp文件夹下config 里面有个convention.php文件 里面有三个配置 'DEFAULT_MODULE' => 'Home', // 默认模块 'DEFAULT_CONT ...
随机推荐
- Tomcat中部署后JspFactory报异常的解决方案
The method getJspApplicationContext(ServletContext) is undefined for the type JspFactory的异常的原因及解决办法原 ...
- Spring MVC实现文件下载
下载文件① 下载文件需要将byte数组还原成文件. 首先使用mybatis将数据库中的byte数组查出来,指定文件名(包括格式).然后使用OutputStream将文件输入 @RequestMapp ...
- LeetCode-Group Shifted Strings
Given a string, we can "shift" each of its letter to its successive letter, for example: & ...
- 分享:大晚上用自己的锤子手机跨系统刷MIUI,跌宕起伏啊!!
序言: 写这篇博客之前问了一下博客园官方,能不能写关于刷机这一方面的,官方还是比较通情达理的,说技术类没有限制的,那样我就放心的写了.今天早上在博客园中稍微逛了一下,感觉似乎很少有关于刷机这一方面的, ...
- Android开发新手第一要素
很多新手开发程序的时候,或者将原来跑在Android 2.X上的程序迁移到Android 3.x以上的时候经常会莫名其妙的出现崩溃(Crash).从我的经验来看,这里可能有很多原因,但是最重要也是最常 ...
- 自编基于jQuery实现分页插件
$(function(){ }); /** * @params dataUrl:请求数据url地址 * @params countUrl:请求数据总数url地址 * @params pageSize: ...
- Sublime Text 3 Build 3065 All System CracKed By Hmily[LCG]
Sublime Text 3 Build 3065 All System CracKed By Hmily[LCG] <ignore_js_op> 程序员文本编辑器 Sublime Tex ...
- Cocos2d-X3.0 刨根问底(九)----- 场景切换(TransitionScene)源码分析
上一章我们分析了Scene与Layer相关类的源码,对Cocos2d-x的场景有了初步了解,这章我们来分析一下场景变换TransitionScene源码. 直接看TransitionScene的定义 ...
- 【poj1012】 Joseph
http://poj.org/problem?id=1012 (题目链接) 半年前的考试题..任然清晰的记得那次差10分就AK... 题意 约瑟夫环,有前k个好人,后k个坏人,要求使得后k个坏人先死的 ...
- POJ3422 Kaka's Matrix Travels
描述 On an N × N chessboard with a non-negative number in each grid, Kaka starts his matrix travels wi ...