• thinkphp一句话疑难解决笔记 3


    错误调试, E($msg)?
    这个是tp内置的E 方法, E 函数. 它是tp抛异常 的另外一种方式. 默认的异常处理方式是, 在 框架下的 ThinkPHP/Tpl/think_exception.tpl, 其中的提示消息是: $e['message'], 而 E($msg)的使用场合是: 抛自定义异常消息: 如果你不想显示系统默认的 $e['message'], 那么你可以用 E 方法,显示自定义的异常消息. 而实际上, E方法,还是走的异常 途径, 它是: E($msg, $code=0) { throw new ThinkException($msg, $code); }. 就是说, 如果你判断某个条件或执行出错, 你可以自己手动抛异常, 只是异常的提示消息由E方法的第一个参数确定, 当然不一定是$msg变量名. 后面的$e['file', 'line', 'trace']等, 跟think_exception.tpl是一样的.

    php本身就有异常类, Exception, 基本的使用方法是, 直接抛出异常 throw new Exception($except_msg) , 同样会显示异常消息和trace信息.....(如果不处理, 将会导致程序终止, 如果用 catch...处理则不终止). 而thinkphp的异常处理则是, 直接继承(实际上就是利用php原生的exception类), 在显示页面, 则做了一些包装而已.

    抛异常时, 是 throw new ThinkException($msg,$code);, 注意写模块时, 要加上根路径, 如果不加, 就表示是当前路径(可能是当前模块...), 如果加上,表示是根路径, 而系统默认的根路径就是 THINK_PATH.'Library/', 这个就正好!

    性能调试,查看代码运行时间, 和内存占用情况?
    G

    模型调试, 查看sql语句和数据库错误?

    如果要判断 “常量”是否dingyi, 使用 defined, isset是判断变量的,它后面要跟 $变量的, 如果用 isset(__FILE__)就会报错。

    __FILE__, __LINE__, 的性质:不是常量,因为用 defined(__FILE__)判断会返回 false, 也不是普通变量, 因为用 isset(__FILE__)来判断会返回语法错误, 他是php语言自己在系统内部定义的 全局变量, 只可以在php脚本程序的函数 中使用! 表示当前使用这个 全局变量的 文件(跟包含/不包含无关)本身的 在服务器上的物理磁盘上的 绝对路径。

    ---* IpLocation的用法 *---
    Wry ['rai]:讽刺的,挖苦的;扭曲的,歪斜的: with a wry smile, wry face, wry nose, make a wry face.
    QQWry 可以是一个php扩展,用来读取QQWry.dat数据文件。
    QQWry.dat是彩虹QQ外挂文件使用的 显IP地址的QQ

    将qqwry.dat的扩展名修改为mdb, 用access打开时提示输入密码:...

    QQWry.dat文件,分成:文件头,索引区,记录区. 由于记录不是等长的,所以不能直接通过记录区查找到记录,要通过索引,才能查找到.

    ---* IpLocation的用法 *---
    获取位置/地址的方法是: getlocation, 注意 中间的location的开头字母l, 不用大写的.
    默认的ip地址库是UTFWry.dat, 如果不是, 则要在 new IpLocation('这里写上 qqwry.dat数据库文件').
    不用去专门找 utf-8的编码的dat文件, 如qqwry.dat也可以, 它是gbk编码, 把信息取出来后, 用iconv作一次转化就可以了...


    开启文件支持模块, 是php的扩展, 名字叫 fileinfo, 不是finfo, tp提示说, 为了更好的使用文件上传功能, 建议服务器开启 finfo模块。

    对比记忆 文件上传和图片处理类:
    都是先创建一个对象, 然后设置配置, 最后引用 一个动作方法: 上传的动作 函数是: uploda(), 图片的动作 函数是: crop(...)/thumb(...)/water(...)/text(...)-> save(...). 最后,返回的结果不同: 上传返回的是 由上传文件的信息(即使是一个) 组成的数组, 图片动作返回的是 对象本身 $this(包括通常最后的save方法), 所以支持连贯操作.

    seliux的配置命令中,是 enforce, 不是force!

    常量的定义方式, 全局常量和 类里面的常量定义方式是不同的: 全局的用 define(CONST_NAME, value). 类里面的就不能用define了, 而要用 const IMAGE_THUMB_SCALE

    我觉得很无语的是, dw的cs5,(cs5比cs3好用), 安装时放在桌面的快捷方式, 不能删,也不能改名,也不能移动位置,甚至你将快捷方式移动到开始菜单后再放到桌面上来, 都会失效!(或许是删除了注册项什么的? 一旦检查到移动位置, 就令快捷方式失效吗?)

    $_SERVER的几个容易混淆的元素?
    $_SERVER['SCRIPT_NAME'], = [PHP_SELF], 表示只是(脚本的本身, php文件自己)文件名称本身: /index.php
    ['SCRIPT_FILENAME'], 是完整的包括文件路径的名称: C:/wamp/www/index.php

    protected function templateContentReplace($content) {
    // 系统默认的特殊变量替换
    $replace = array(
    'ROOT' => ROOT, // 当前网站地址
    'APP' => APP, // 当前应用地址
    'MODULE' => MODULE,
    'ACTION' => ACTION, // 当前操作地址
    'SELF' => htmlentities(SELF), // 当前页面地址
    'CONTROLLER'=> CONTROLLER,
    'URL' => CONTROLLER,
    'PUBLIC' => ROOT.'/Public',// 站点公共目录
    );

    文件上传,有两个数组,不要搞混了: 一个是上传文件的配置数组, 一个是上传文件信息的数组.即使是同名的key含义也不同, 前者表示属性的配置, 后者表示属性的获取.

    即使你不设置upload的任何上传配置, 也会有默认的上传配置信息, 那就是Upload类的私有成员: private $config, 里面有默认的配置信息, 如: rootPath='./Uploads', savePath='', saveName=array('uniqid',''),等等.
    而 Upload在实例化的时候, 构造函数会要求输入一个用户自定义的配置, 然后会将类对象默认的$config和自定义上传配置进行合并...

    public function __construct($config=array(),...){
    	$this->config = array_merge($this->config, $config);
    
    }
    
    

    php虽然没有类型强制规定, 但是今后规范类型是一种趋势, 所以, 现在可以通过初始化的方式, 来变通的规范变量类型. 初始化的方式根据你想存储的数据类型来决定: $arr=array(); $str=''; $num=0; $obj=null;

    实例化Upload类的时候, 可以使用完整的类路径, 也可以使用 命名空间, use关键字指的是 哪一个类文件, 而namespace指的是目录.

    U方法, 虽然指定的是操作方法, 但是生成的是具体的操作方法名称对应的html文件,如: U('uplad'): /index.php/Home/Index/upload.html

    数组虽然可以相加, 如arr_a + arr_b, 但这种运算通常没有实际意义
    对于数组array('name'=>'John'), 前面的叫 索引/index/key, 后面的叫值. 分成数字索引和字符串索引.

    数组可以用数字索引和字符串索引混合使用! 混合时,数字索引不管前后的字符串索引, 仍然从0开始编号.

    		$arr=array('name'=>'Jonh', 10,20, 'age'=>20);
    		dump($arr);
    
    array
      'name' => string 'Jonh' (length=4)
      0 => int 10
      1 => int 20
      'age' => int 20
    
    

    注意: array_merge是有前后顺序的, 对于字符串索引, 相同名称的key, 则用后面的key-value来覆盖前面的. 没有重复的, 则按第一个先排, 后面的后排进行组合.

    思想:
    php, thinkphp是解释型语言, 即使如果某个方法/函数中有代码错误(如类不存在), 只要你当前页面对应的控制器的方法中, 没有错误,在运行当前页面的时候, 都不会报错.(比如 请求index页面时, 不会去检查upload方法是否有错的! ) 只有在client去请求另外的页面, 这个另外的页面有错的时候, 才会报错. 不像编译型的语言, 在运行前, 就进行了整体的代码检查....

    tp3.1里面, 由于没有使用namespace, 所以要使用org类库, 要使用import, 而tp3.2中, 使用了namespace, 所以就不用import, 而是用use...

    tp中, 要给模板传递变量, 可以使用多个 语句, 分开传递多个变量, 并不是 只能传递一个变量, 也不必 把多个变量, 强迫的放到一个数组中来传递.

    写代码, 首先要记代码.开始记代码

    元素的标签就是前面的html元素:getElementByTagName('span'):
    var tab_tit = document.getElementById('think_page_trace_tab_tit').getElementsByTagName('span');
    var tab_cont = document.getElementById('think_page_trace_tab_cont').getElementsByTagName('div');

    ThinkPHP的框架目录下:
    除了Common, Conf,Lang, Library, Mode, Tpl目录外, 还包括一个授权文件license.txt, 一个logo图片logo.png, 一个框架的入口文件。

    根目录下的Public目录是放: 项目的资源文件的,包括css,img, js等。
    而ThinkPHP框架下的Tpl目录,是存放框架内的一些错误, 提示, 跳转信息的模板文件,包括: dispatch_jump.tpl, page_trace.tpl, think_exception.tpl

    网站根目录的应用程序的入口文件是: /index.php
    tp框架的入口文件是:ThinkPHP/ThinkPHP.php

    其实, 写php文件, 也不大可能蒋php和html完全分离, 有时甚至很多时候, 需要将php和html混合书写,一个原则: 凡是属于php代码编程的内容,包括变量,大括号等放在php的括号中, 其他直接放在文件里。。。

  • 相关阅读:
    MySQL 中now()时间戳用法
    ajax local.href不跳转的原因之一
    Call to a member function select() on string错误
    TP框架中ajax post请求时提示404
    TP框架中field查询字段
    jQuery如何获得select选中的值?input单选radio选中的值
    TP框架中session操作
    InnerHtml() 与html( )的区别
    C++开源项目等收集
    RCU-数据库初始化参数
  • 原文地址:https://www.cnblogs.com/bkylee/p/6125878.html
Copyright © 2020-2023  润新知