tp框架中的一些疑点知识-1
tp默认的编码是utf-8
Runtime中的Cache和Logs都是分模块的,因为在应用app下可以有多个模块,但是 公共模块和Runtime模块只有一个, 所以, Runtime要包含各个模块的内容. 包括home和admin的内容: 比如:Cache/Home/....php, Cache/Admin/...php, Logs/Admin/...log , Logs/Home/....log
不管是任何一种语言, 都要养成相同的, 严格严禁的编程习惯, 比如变量在使用前, 要事先声明并初始化。
php语言的换行并不像 有些等语言那样,必须用回车来分割。 你可以在同一行任意的写多个语句。只要中间用 空格进行分割就好。比如设置
define('APP_DEBUG', false)
生成的common~runtime.php中的内容就是全部写在一行内的。
调试和非调试的区别是: 仍然还是有Runtime目录及其下面的Cache、Data、Logs/Temp等目录; 但是在Data和Logs下就没有记载日志了
但是Cache缓存还是有的; 当时要多生成一个 common~runtime.php这个 通用函数的运行时版本。
如果你的环境足够安全,比如在linux服务器上开启selinux时, 不希望生成目录安全文件,可以在入口文件里关闭目录安全文件的
生成:define( 'BUILD_DIR_SECURE', false);
注意那个 define('DIR_SECURE_FILENAME', ‘default.html’)
是指定生成的安全文件的名称。是否要生成
用build。
在tp中, 表示生成/的意思用的是 build这个单词.比如: define('BUILD_CONTROLLER_LIST', 'Index,User,Foo');
等
关于配置文件?
一个应用,又叫做“项目”
有多种配置文件,比如模式配置文件(通常都是普通应用模式),状态配置文件(软件的应用场景,比如办公室和家里),扩展配置文件(是对相应配置文件的扩展)
配置文件加载的顺序是: 惯例-》应用公共 -》 调试 -》模块 -》状态 -》扩展 -》动态配置(文件)
而实际上,根本就不会搞这么复杂, 整这些没用的东西,就是最普通的 “公共应用配置文件”和 ‘模块配置文件'就好了
其他的只是了解:
- 动态配置,是指不放在配置文件中,而是直接在代码中,用C函数来配置的,当然也不会写入到配置文件中,因此只是在当前执行期间、当前请求中有效
- 批量配置,是指配置项不是一个一个的指定,而是用数组来指定,当然这个也是动态配置。比如:
C($user_config);
- 扩展配置,是针对每一种配置文件都有效的,比如对公共配置,对模块配置都可以。主要目的是便于 集中/分门别类的管理.比如:将前台和后台都用到的用户配置,单独放在一个配置文件user.php中,然后并入到公共配置文件中:
在App/Common/Conf/config.php的内容中, 加入: 'LOAD_EXT_CONFIG' => 'user', 当然App/Common/Conf/下要放置 usr.php配置文件
- 注意的是,所有的配置文件, 最后都归入到全局配置中 都统一使用
C('config_name');
来获得
最后,C函数的三种用法:
- 获取配置值;
- 动态设置配置;
- 相当于三元运算符的
获取或设置默认配置值 C('CONFIG_NAME', null, 'value_when_null'
- 配置参数的名称中, 不能包含点号和特殊字符,因为C函数中的点号(点语法)是用来获取二维配置参数的
echo C('APP_NAME'), ' ', C('USER_TYPE');
C('name', 'anna');
echo C('name');
$user = array(
'usr' => array('age' => 20, 'addr' => 'China', 'gender'=>'male'),
);
C($user);
echo C('usr.age'), ' ', C('foo', null, 'not this para');
多个入口文件和多个模块的问题
在Application下的目录都叫"模块", 比如" Common公共模块, Home前台模块, Runtime运行时模块" 等
关于模块的设置操作有:
- Application下的所有模块默认都是可以访问的.
- 可以设置禁止访问/不可以访问的模块:
'MODULE_DENY_LIST' => array('Common', 'Runtime', 'Api')
等, 不可访问的模块主要是用来内部调用, 放置公共接口或函数给其他模块使用的. - 同样的道理, 可以设置 允许访问的模块:
- 还可以设置单模块方式:
'MULTI_MODULE' => false , 'DEFAULT_MODULE' => 'Home'
对 同一个应用 或项目, 虽然是单入口方式, 但是 并不是说只能有一个入口文件, 你可以用 多个入口文件, 比如 index.php, 或 admin.php 入口文件.
- 一个入口文件, 同时 只能绑定 一个模块, 如果企图想 绑定多个模块, 即用逗号来分割的话, 在创建模块的时候, 会把这个逗号看成是模块名字的一部分, 从而生成中间有逗号的目录, 但是在 controller/中的IndexController.class.php中就会报错
C:\wamp\www\APP\Admin, Home\Controller 中的IndexController.class.php 文件:
namespace Admin, Home\Controller; // 这里会报错! 把 Admin,Home看成是一个整体
use Think\Controller;
- 因此, 想要一次性地 在同一个入口文件中, 生成多个模块, 是不可能的, 只能是 一次/ 一个入口文件 只能生成一个 模块. 如果要生成多个模块, 必须用多个入口文件
- 而且, 如果想要在 默认生成的模块名称是 Admin的话, 你不能在 入口文件中 设置
define('DEFAULT_MODULE', 'Admin');
只能在 convention.php中设置'DEFAULT_MODULE ' => 'Admin' ,
- 因此, 要生成 Admin目录的话, 可以 再 复制一个 index.php 文件到 admin.php, 只是修改一下 BIND_MODULE就行了.
admin.php:
define('BIND_MODULE', 'Admin');
define('APP_PATH', './Application/');
require './ThinkPHP/ThinkPHP.php'; 注意, 凡是 没有 引号的 字符序列都被看做是 "关键字", 比如, define, true, if, while , CONST_NAME 等
在入口文件中, 绑定模块的作用, 有两个: 一个是生成 指定的 模块 , 如Admin, 不再是默认的模块; 第二, 是可以在访问的时候, 自动/ 默认的就是 那个模块路径下的控制器和操作了. 就不必再写模块名称了, 比如: http://ServerName/(这里不能再写Admin模块名了)/Index/index/var/value
同样的, 绑定控制器 到当前入口文件: define('BIND_CONTROLLER', 'Index');
那么 访问地址就是: http://localhost/index/var/value
模块名称和控制器名称都不必(也不能写了)写了
配置时, 一定要注意两种格式和方式的区别, 有的配置方式是 define('...', '...')
, 而有的配置方式是用 数组项来配置的, 形如 : 'MODULE_ALLOW_LIST' => 单个的内容用单个单词, 如false, 'App_Name', 多个的内容用 array('Home', 'Admin');
url的格式, 强烈不推荐使用类型链接, 即用? var=value的方式, 而是使用 /var/value, 用/隔开的链接才是有利于搜索引擎抓取的
vim下的搜索命令是: vimgrep, 简写就是vim. 关于这个全局搜索的用法根grep的差不多, 但是, 如果你直接使用 grep的话 就会在vim的外部执行,
根vim内部就没有什么关系了, 所以, 要使用vimgrep, 这样搜索的结果会显式在 vim的quickfix窗口中关于搜索的格式, 跟grep差不多:
vim /搜索内容/ 搜索范围
只是跟grep不同的是, 搜索内容要用 /... / 阔起来.
范围的表示方法:
- % 表示当前文件
- 表示当前目录(不包含子目录)
- ** 表示当前目录及其下的所有递归 子目录
- 可以使用多个路径, 用空格来隔开.
搜索和quickfix窗口结合使用?
你可以直接的/单独使用vim命令来搜索, 这时候, 搜索结果是保持在另外一个缓冲区,但是他不会被 直接显示出来 当然你可以用 cn, cp 来切换
但是毕竟不是很直观, 要显示更直观, 就要结合copen命令, 将搜索结果用管道命令 传递给copen打开. 即:vim /tags.php/ ** | copen
注意, 如果在vim冒号命令的前面 指定了范围, 比如 %, 比如1,10等这些, 就表示的是 对当前缓冲区中的内容进行操作, 就不会 "临时地"返回到控制台. 而是直接对当前缓冲区进行操作.
:%!nl
跟set nu
的区别是: 前者的行号是作为这一行的内容而存在, 而后者的行号不是内容的一部分.
vim中如何引用xdebug的函数命令?
是通过 冒号命令中的 :python ..., 这里好像一定要加python, 否则就是错误的.
命令中, 使用的对象是debugger, 不是 xdebug.
比如: 要单步执行调试命令, 使用的命令是: :python debugger.step_into()
逐过程执行: : python debugger.step_over()
杂项
php跟其他语言的变量是一样的, 唯一的区别是: 只是在前面加了一个 dollar符号
空字符串和null的区别? 当要操作的变量是一个字符串的时候, 用''赋初值, 当变量是 数组或对象(实例)的时候, 用null赋初值.
**\Think**核心的基本组成包括两个部分, 一个是系统核心xx 类文件, 一个是系统的扩展驱动目录, 里面通过Driver来组织.
一个反复强调的常识了: 全局方法 , 才用直接调用, 前面不用任何对象或类, 直接写. 如果是不是全局方法/函数, 是属于类/对象的方法, 那么就必须通过类/对象 用(:: 或->) 来引用/调用.
php的类的注册?
Think目录及 其子目录下的类, 都可以自动注册, 不需要再用 'AUTOLOAD_NAMESPACE' 来指定. 但是在 定义/引入这些类的时候, 要正确 书写 命名空间, 因为, 系统就是通过 命名空间来找到/定位这些类, 实现自动载入/自动注册的.
tp框架中的一些疑点知识-1的更多相关文章
- tp框架中的一些疑点知识-7
mysqli是用面向对象的,所以用箭头对象语法, 而mysql是用C语言面向过程写的, 所以用的都是php全局函数 式的写法. tinkle: 叮叮当当的响; (口语)一次电话, i will giv ...
- tp框架中的一些疑点知识-5
关于vim中的缓存区的前后bp和bn的界定 通过命令ls可以看到 缓存区的 排序. 最开始打开的文件排在最上面, 序号最小. 那么它们就是 更 前 的缓冲区. 序号更前的用bp, 序号靠后的用bn. ...
- tp框架中的一些疑点知识-2
tp中有三种常量: 预定义常量, 这个设置后不会随环境的改变而改变的,比如'URL_MODEL' => 1 注意是 model, 不是 url_mode 路径常量, 也不会随环境的改变而改变的, ...
- tp框架中的一些疑点知识-3
rewrite就是伪静态, 伪静态就是 rewirte, 可以把入口地址隐藏掉. 兼容模式就是 普通模式 和 pathinfo模式的 结合, 前面是普通模式 ?s= , 后面的 模块/控制器/操作和参 ...
- tp框架中的一些疑点知识-8
NaN是Number对象的一个属性, 表示一个特殊值, 表示不是一个 数字, 引用/赋值时, 要使用: Number.NaN 判断 一个值是不是 NaN, 用 isNaN() 函数, 它是一个js的全 ...
- tp框架中的一些疑点知识-6
vim自带一个目录浏览器,使用命令:E就可以调出来,实际上就是浏览器的名字就是"网络读写"netrw vim也自带了 补全功能, 启动键是 "ctrl_N" 或 ...
- tp框架中的一些疑点知识-4
$_SERVER的几个元素: script_name脚本名称, 是指这个脚本文件本身的文件名, 通常只是 : /index.php path_info: 是从控制器/操作方法开始到最后的内容,包括路径 ...
- tp框架中的一些疑点知识--cookie和session的配置
不同的浏览器采用不同的方式保存Cookie. IE浏览器会在"C:\Documents and Settings\你的用户名\Cookies"文件夹下以文本文件形式保存,一个文本文 ...
- TP框架中关于if、else 分支结构逻辑错误
TP框架中关于if.else 分支结构逻辑错误 代码中没有任何错误 将注释往下一行就可以解决 造成问题的原因: TP框架中 想分配变量可以使用assign方法 在[模块]中: $this->as ...
随机推荐
- beego 初体验 - orm
goland Terminal运行命令: go get github.com/astaxie/beego/orm 安装go mysql驱动: go get github.com/go-sql-driv ...
- tp连贯操作
链接数据库 首先写配置文件 复制concentration.php中的 /* 数据库设置 */ 'DB_TYPE' => '', // 数据库类型 'DB_HOST' => '', // ...
- Hello py
https://www.cnblogs.com/AdaminXie/p/8339863.html https://www.cnblogs.com/-clq/p/8340515.html https:/ ...
- html5-css边框img
div{ width: 500px; height: 300px; background: rgb(122,30,60); border:15px solid black; ...
- sitecore系列教程之简单和个性化
现代Web开发倾向于关注内容管理系统(CMS)的功能丰富的程序.最终用户可以做什么?作为内容管理者,我们可以为最终用户实现其目标提供哪些功能?开发人员可以为内容管理员构建哪些组件来实现它们? 相关内容 ...
- mysql分区/分片
一.分区概念 mysql 5.1 以后支持分区, 有点类似MongoDB中的分片概念. 就是按照一定的规则, 将一个数据库表分解成很多细小的表, 这些细小的表可以是物理的分区, 就是在不同的位置. 但 ...
- windows环境下 curl 安装和使用
curl下载地址:https://curl.haxx.se/download.html,拉到页面最底下,选择红色选中的那个CAB的进行下载,如下图所示: 下载完成后,解压. 解决windows控制台c ...
- hashcat使用命令简介
1.指定HASH类型 在HashCat中--hash-type ?参数可以指定要破解的HASH类型,运行hashcat主程序加上--help参数,在* Generic hash types:中可以看到 ...
- RTP协议全解析(H264码流和PS流)(转)
源: RTP协议全解析(H264码流和PS流)
- twiested 及其他轮子
https://www.lfd.uci.edu/~gohlke/pythonlibs/