$_SERVER的几个元素:

script_name脚本名称, 是指这个脚本文件本身的文件名, 通常只是 : /index.php

path_info: 是从控制器/操作方法开始到最后的内容,包括路径参数但是不包括动态参数

php_self则是所有的url地址内容中除了主机后的部分, 但不包括动态查询参数

request_uri 则是所有的url地址内容中除了主机后的部分, 包括动态查询参数

query_string就是动态查询参数, 即 问号后面? 的内容(不包括问号)

比如:

对于这个url地址而言, http://localhost/index.php/home/index/foo/name/obama/age/20?a=1
'REQUEST_METHOD' => string 'GET' (length=3)
'QUERY_STRING' => string 'a=1' (length=3)
'REQUEST_URI' => string '/index.php/home/index/foo/name/obama/age/20?a=1' (length=47)
'SCRIPT_NAME' => string '/index.php' (length=10)
'PATH_INFO' => string 'index/foo/name/obama/age/20' (length=27)
'PATH_TRANSLATED' => string 'C:\wamp\www\home\index\foo\name\obama\age\20' (length=44)
'PHP_SELF' => string '/index.php/home/index/foo/name/obama/age/20' (length=43)

类的操作方法, 中, 可以包含/也可以不包含 显示模板的语句(show/display语句). 但是, show和dislay只是一个普通的方法名, 它可以在操作函数的任何地方调用, 甚至你可以在同一个操作 中, 多次地 调用show 和display方法 都可以, 但是 如果在操作函数中, 使用了die语句后, 后面的语句和后置方法 _after_method方法将都不会执行.


关于连贯操作和不使用连贯操作.

order,limit, where等叫做连贯操作. 连贯操作本身是不分先后顺序的. 因为他们返回的都是模型对象本身

但是 select操作必须放在最后, 因为select操作不是连贯操作, 他返回的是结果集, 不是模型对象本身, 不是return $this;

在进行curd操作的时候, 如果不习惯连贯操作,也可以将条件放在 select, delete等操作的参数中,使用数组的形式, 其中,数组的"索引"名称就是 连贯操作的 方法名,比如:

$u -> select(array('where'=>'name="foo"', 'order' => 'create_time', 'limit' => 10));

where 的条件 连贯操作

支持三种格式的形式

  • 字符串格式, 比如: $Model -> where('name="foo" and age=20 or addr <> "chengdu" ') ->select() 字符串格式也支持数据类型的识别, 外面用双引号, 里面的数据类型中, 如果是字符串就用单引号表示. 同样的, 反过来使用单引号或双引号也是一样的. 当然更好的是使用格式预处理的方式, 支持%d, %s, %f. 预处理后面的变量可以使用数组, 也可以直接使用逗号分隔, 但是要注意, 字符串表达式还是要用and 或 or 等符号进行连接

    $m -> where("name='%s' and age=%d", array($name, $age)) -> select();
  • 数组格式

    使用拼装/ 拼接数组的方式, 数组元素的名称就是字段名, 值就是条件. 然后在 $m -> where($map) -> select();
  • 使用表达式

    上面的使用字符串方式,写法不是很方便, 使用数组方式又只能表示 "相等" 的条件, 要使用 更复杂的条件,比如 不等, 大于, between, in等条件, 就要用 "表达式"

    格式是: 前面的数组的名称, 是字段名, 后面的条件值用数组表示, 数组的第一个元素是表达式符号(用符号表示), 包括: eq, neq, gt, egt, elt(注意大于等于不是ge, 而是egt), between, not between, in 等, 第二个元素就是表达式的值.比如:
$cond['name'] = array('eq', 'foo);
$cond['age'] = array('between','10,20'); $m -> where($cond) -> where($map) -> select();
  • where支持 多次调用, 但是只能是数组多次调用, 如果where条件是字符串, 则只能使用一次
Where 条件表达式格式为:
1. 三个元素, 是为了支持and,or,xor逻辑操作,前面两个元素必须是数组的, 表示多个条件之间的逻辑组合 1. 两个元素, 支持普通的条件表达式,两个元素都用字符串表示,第一个元素是'in,not in, between, not between,like'等形式, 后一个元素是字符串,比如'1,8', '1,3,5' 或数字 10等 1. 其中,in 和 between的数字字符串 也可以用array表示. 比如
$map['id'] = array('not in','1,5,8');
$map['id'] = array('not in',array('1','5','8')); 1. 当然, 也可以将表达式符号和数字写在一起, 用exp表示: $map['id'] = array('exp', 'in(1,3,5)');

关于 异或 的意思和应用

xor(异或) xor 两个输入中只有一个是true时,结果为true,否则为false

在编程中, 如果要进行逻辑判断, 判断两个条件中, “有且只有一个条件为true”时, 就可以使用 这个 xor的逻辑运算符。


模型类并非必须定义(但是控制器的类必须显示的定义, 必须继承自 Think\Controller类), 只有当 模型中, 存在自定义的 业务逻辑(就是模型类 需要 添加/增加/自定义一些 基类Think\Model 中没有的成员方法)时, 或需要

增加一些自定义的成员属性比如 $_validate, $_auto 等时, 才需要自定义模型类. 通常如果只是对模型表进行 curd操作时, 基类提供的成员方法就已经足够了.

前缀DB_PREFIX指的是默认的 "表前缀" 是表前缀, 不是数据库的前缀, 数据库本身是不需要什么前缀的, 比如demo数据库. 如果是模型 <-> 表的前缀跟默认的不同, 则需要自定义成员属性$tablePrefix

数据库的连接信息有三种配置形式

  • 一是传统的使用数组配置方式 可以在convention.php 也可以在 应用配置或模块配置 文件中设置
  • 二是使用字符串的方式: $conn = "mysql://root:123@127.0.0.1:3306/demo#utf8"
  • 三是使用配置"常量"的方式, 在配置文件中, 设置一个常量DB_CONFIG1的数组变量, 然后在实例化中, 直接用这个DB_CONFIG1

    注意, M方法有三个参数, '模型名称', '表前缀', '连接参数'. 本来应该是 C('DB_COFNIG1'), 但是M方法会自动去获取配置参数, 所以不必使用C,直接用这个DB_CONFIG1...

当然 一般的数据库连接都使用 默认的/常规的 配置就行了, 很少使用自定义的 连接参数, 只有在 跨项目, 操作其他数据库, 非当前数据库的时候, 才使用 $conn自定义连接.


php中的运算符?

  • 算数运算符, /是求商, %是求模(即求余数); 字符串运算符包括. .=, 自增运算符 ++$a; $b--; 比较运算符,

  • 逻辑运算符: 支持单词和 符号两种形式: 其中单词形式的是 VB风格的: and(两者都为true), or(至少有一个为true), xor(表示: 有且只有一个为true时返回true). **符号形式的是 c/c++/java风格的有 &&, || , ! **

    但是, 这两种逻辑运算符的优先级是不同的. 符号形式的&& 和 || 比单词形式的优先级更高.

  • 数组运算符支持: +, == === !=

  • 更重要的是, php还支持 对变量的 按位 运算. 包括 &, |, ^(按位异或) , ~(按位 非) 移位运算(<<, >>) . 按位运算只有符号形式, 没有单词形式, 注意和 &&, || , ! 的区别

  • 注意, 在tp的xml标签 <if condition=".."> 中, 如果要使用 运算符, 要使用 字符型 or, and xor 不能使用 && || 等之类的符号.

#### php中 字符串和整数之间的 比较和运算规则?

  1. 首先, 字符串都要被转换成 整数来进行 比较 和 运算;
  2. 其次, 字符串转换的规则是 两点

    - 一是,如果包含 小数点, e 或 E 则转换为 浮点数,float, 进行运算后, 得到的结果就是 float 浮点数, 用 gettype($var) 得到的结果就是double。

    - 二是, 字符串转换成整数,结果以 “开头的字符为准” 如果开头的不是合法的数字或数字0,则转换为整数0. (注意, 开头的数字0会被忽略...)

如何计算 按位取反的结果: $a=8; echo ~$a;

在数值范围内,~a = -(a+1)

8的二进制是1000,补满32位(对于32位系统),也就是前面 28个0 1000

取反后 28个1 0111

第一位是符号位 1代表负数,剩下的 (27个1 0111 这个就是补码)

负数是用补码表示的,补码是原码取反+1,也就是说 27个1 0111 是某个数的补码,那倒推回去,这个数就是补码-1后取反,也就是 27个1 0110取反,得到27个0 1001,也就是9,再加上前面的符号位,得到-9

:补码 等于 原码取反加1;

: 原码就等于 补码 减1 取反。


为什么要使用 join操作?

  1. join的目的并不是要把多个表要连接起来, 而是 因为要查询的数据 分布在多个表中, 我们要从多个表里面取数据, 但是 连接取数 不是任意的 取数据的, 而是有依据的, 依据是 这两个表 中的 某个 关键字段 (比如用户id )要有相同的值, 这样取出的数据才有 实际意 义, 才有现实意义, 表示的是 这些数据是 相关的, 这些数据 才是表示/描述的是 同一个人的信息. 依据是用 ON 来描述的.

  2. join操作可以单独地 设置 前面那个表的 alias, 也可以 不用设置表的别名.

  3. 在table和join连贯 操作中, 使用的表 名称 都要用 全名, 比如 think_user, think_dept. 但是可以用 下划线加全大写的方式 来表示这些表名. 比如: USER, DEPT

  4. 关于操作类型, 有四种连接方式, inner join (就等于join , 这是默认的连接方式), left join, right join, full join.

  5. 表示 其他连接方式的时候, 有两种方式, 一种是 在前面说明, 即join的第一个参数前面, 另一种方式是 在join 后面, join的第二个参数规定连接方式, 为 left, right, full . 比如 $Model -> join('left join放在前面 __DEPT__ dept on __USER__.id = dept.id'); $Model -> join('__DEPT__ dept on __USER__.id=dept.id', 'left' 第二个参数);




#### 关于jquery的知识点
1. 将jquery对象转换为dom的方法有两种, 一种是
- 使用 数组下标的方式 $('p')[0], [1], [2], 这是因为 jquery对象其实是一个数组 是一个 html元素的 数组, 即 `Array `所以可以用数组的方式访问;
- 使用方法 get(), 比如: $('p').get(0) // 获取第一个dom元素, .get(1)//获取第二个dom元素

<script>
$('a').click(function(){ $('span').get(1).innerHTML='test';
$('span')[1].style.color='red';
});
</script>
  1. :not是一个基本过滤器, 选中除了所说的条件之外的所有元素. 这个否定条件可以是多个, 每个否定条件之间 要用 逗号来分开! 注意是逗号, 不能用空格, 如果用空格, 将会把它看成是一个否定条件! 比如: $('span:not(".sp1, .sp2")').html('<b>test</b>').css('border', '2px solid gold'); 将选中除了有 sp1类或者 sp2类的所有span, 但是如果是: $('span:not(".sp1 .sp2")').html('<b>test</b>').css('border', '2px solid gold'); 的话, 将 只会除去 class类为 ".sp1 .sp2" 层级的span元素.

    not方法的用法也是一样的

tp框架中的一些疑点知识-4的更多相关文章

  1. tp框架中的一些疑点知识-7

    mysqli是用面向对象的,所以用箭头对象语法, 而mysql是用C语言面向过程写的, 所以用的都是php全局函数 式的写法. tinkle: 叮叮当当的响; (口语)一次电话, i will giv ...

  2. tp框架中的一些疑点知识-5

    关于vim中的缓存区的前后bp和bn的界定 通过命令ls可以看到 缓存区的 排序. 最开始打开的文件排在最上面, 序号最小. 那么它们就是 更 前 的缓冲区. 序号更前的用bp, 序号靠后的用bn. ...

  3. tp框架中的一些疑点知识-2

    tp中有三种常量: 预定义常量, 这个设置后不会随环境的改变而改变的,比如'URL_MODEL' => 1 注意是 model, 不是 url_mode 路径常量, 也不会随环境的改变而改变的, ...

  4. tp框架中的一些疑点知识-3

    rewrite就是伪静态, 伪静态就是 rewirte, 可以把入口地址隐藏掉. 兼容模式就是 普通模式 和 pathinfo模式的 结合, 前面是普通模式 ?s= , 后面的 模块/控制器/操作和参 ...

  5. tp框架中的一些疑点知识-8

    NaN是Number对象的一个属性, 表示一个特殊值, 表示不是一个 数字, 引用/赋值时, 要使用: Number.NaN 判断 一个值是不是 NaN, 用 isNaN() 函数, 它是一个js的全 ...

  6. tp框架中的一些疑点知识-6

    vim自带一个目录浏览器,使用命令:E就可以调出来,实际上就是浏览器的名字就是"网络读写"netrw vim也自带了 补全功能, 启动键是 "ctrl_N" 或 ...

  7. tp框架中的一些疑点知识-1

    tp默认的编码是utf-8 Runtime中的Cache和Logs都是分模块的,因为在应用app下可以有多个模块,但是 公共模块和Runtime模块只有一个, 所以, Runtime要包含各个模块的内 ...

  8. tp框架中的一些疑点知识--cookie和session的配置

    不同的浏览器采用不同的方式保存Cookie. IE浏览器会在"C:\Documents and Settings\你的用户名\Cookies"文件夹下以文本文件形式保存,一个文本文 ...

  9. TP框架中关于if、else 分支结构逻辑错误

    TP框架中关于if.else 分支结构逻辑错误 代码中没有任何错误 将注释往下一行就可以解决 造成问题的原因: TP框架中 想分配变量可以使用assign方法 在[模块]中: $this->as ...

随机推荐

  1. ASP.NET MVC4中加入Log4Net日志记录功能

    前言 在之前的.NET中,微软还没有提供过像样的日志框架,目前能用的一些框架比如Log4Net.NLog.CommonLogging等,虽然多多少少使用起来有点费劲,但这里还是简单分享一下Log4Ne ...

  2. [ English ] 俚语 “Ping me=打我电话”

    有次做项目的时候跟一个美国人通过MSN讨论一个问题.突然他说了一句,“Can you ping me in 15 minutes?” Ping Me,什么意思啊? 首先我们来看看“Ping”的原意: ...

  3. RRDtool 安装和使用

    一.RRDtool 的功能及使用介绍 定义:RRDtool(Round Robin Database Tool)是一个用来处理定量数据的开源高性能数据库. 1.RRDtool 的特性 由于 RRDto ...

  4. html5-边框属性

    width: 500px;    height: 300px;    background: rgb(122,30,60);    border: 10px solid black;    /*bor ...

  5. codeforces 979C Kuro and Walking Route

    题意: 给出一棵树,其中有两个点,x和y,限制走了x之后的路径上不能有y,问可以走的路径(u,v)有多少条,(u,v)和(v,u)考虑为两条不同的路径. 思路: 简单树形dp,dfs统计在x到y路径( ...

  6. codeforces 957 C Three-level Laser

    题意: 说的是一个电子云的三种状态,但是这不重要. 简单来说,就是在一个升序的序列中找三个数x,y,z,x和z的值之差不超过u,然后使得(z – y) / (z – x)最大. 思路: 使得(z – ...

  7. jsp登陆界面代码

    <%@ page language="java" contentType="text/html; charset=UTF-8"     pageEncod ...

  8. Linux 系统管理命令

    1,uanme 查看是什么系统 uname - r 查看系统内核版本 2 cat /proc/cpuinfo 查看cpu 信息 3 cat /proc/meminfo 查看内存信息 4 date 查看 ...

  9. centos6二进制安装mysql5.5

    centos 6.5,安装mysql 5.5.60 所需安装包mysql-5.5.60-linux-glibc2.12-x86_64.tar.gz.ncurses-devel-5.7-4.200902 ...

  10. golang json用法讲解

    简介 json格式可以算我们日常最常用的序列化格式之一了,Go语言作为一个由Google开发,号称互联网的C语言的语言,自然也对JSON格式支持很好.但是Go语言是个强类型语言,对格式要求极其严格而J ...