zoukankan      html  css  js  c++  java
  • 再谈 tp的 实例化 类 的自动加载

    表示一个域名下的所有/任何主机 使用 的格式是: [*.] example.com 其中 , example.com叫着 裸域名. (这个example.com/net/org不能被注册, 被保留) 其中 [*.] 中的 点 要放在 括号内.

    tp的类自动加载, 总的来说 分两大类

    • 一类是 使用 命名空间的, 这个也是 tp推荐的方式, 可以实现自动加载
    • 另一类是 不使用 命名空间的.

    要实现 自动加载, 需要遵循 以下规定:

    1. 是要用 命名空间 来定义;
    2. 是 类的命名要符合 规范, 包括 驼峰命名 和 类的后缀必须是 .class.php
    3. 是 类文件 的 物理位置 必须 和 命名空间的路径 一致.
    • 只要按照上面的规定来做, 就可以实现 自动加载.
    • 系统默认的 可以自动加载的类库是: 第一个是 框架的 Library下的 目录, 叫公共类库, 可以自动加载, 不需要任何说明的; 第二个是 应用类库, 即 Application项目目录下的所有目录, 包括模块目录,common目录, 或者你自己在 项目目录下创建的目录都叫 应用类库, 都可以实现 自动加载
    • 另一个是 你自己增加的 /扩展的/ 注册命名空间: 使用 'AUTOLOAD_NAMESPACE' => array(...);
    • 再一个是你 自己增加的 类/类库 映射, 在 项目的conf目录下创建的 alias.php 文件中的 映射.
      加载的先后次序包括 
      首先检查 alias.php的类映射, 然后是 Library下的 公共类库, 然后是 你 注册的 扩展命名空间, 最后是 应用类库.

    第二类就是 , 除了上面的 可以自动加载的 类库, 你想找挫折的时候, 要用 import(...) 来引入的类库(一个类文件, 最好就是 只包含一个 类的 定义)

    1. 没有使用 tp的规范 命名, 比如没有遵循 驼峰命名法.
    2. 类的扩展名不是 .class.php, 而是直接用 className.php 来命名的
    3. 没有使用 命名空间
    4. 虽然使用了命名空间, 但是 物理路径 /位置, 和 命名空间表示的 不一致.
      这几种情况, 都可以用 import来做:
    • import的格式 import('类名' [, '类的路径' [, '类的扩展名比如php']]
    • 通常 import 可以自动识别的 类的 位置 是 公共类库 和应用类库的 位置 , 如果 不是这两个, 那么就要使用 第二个参数 指明 类的位置, 如果类的扩展名不是 .class.php 就要使用 'php'



    关于tp的ajaxReturn的使用

    在php中实例化一个 php的 原生对象, 使用的是: $o = new stdClass(); 是用 staClass 而不是 new Object(), 会提示 没有叫 Object的类.
    在tp的控制器中, 指定类的实例化路径时, 因为 你的代码是写在 类定义 的 方法中的, 类定义的 前面是 namespace命名空间,
    命名空间默认的 通常是: namespace HomeController 就是说 , 方法中所有的 类实例化的时候, 如果不写 "根命名空间", 那么就是引用的
    当前命名空间 即: Home\Controller目录中的类. 所以 会报错: HomeController中没有这样的类.

    • **实例化类时, 要使用 "完全限定 命名空间", 即从 反斜杠开始的 根 命名空间, 那么tp就会去查找 系统默认 的 有哪些根命名空间, 包括公共类库
      应用类库, 自定义扩展类库, 和映射类库, 这些都是 系统默认的 "根命名空间". 注意 根命名空间, 并不是网站的根目录!

    • ajaxReturn 本身也要return数据, 但是这个返回的数据, 不是给 本类的 其他成员方法使用的, 而是给 ajax客户端使用的. 因为它是ajaxReturn嘛
      因此, 这个方法的调用方式, 就不是: return, 也不是 return $this->ajaxReturn(...) , 而是 直接的就是 调用这个方法就好了
      在ajax接收处理handler方法, 的 最后, 调用 $this->ajaxReturn('要返回给前端的数据变量$data')

    当然也不能直接在模板中, 使用 {:U('ajaxReturn')} 因为这个U 方法本身其实得到的是一个 html模板地址, 是 一个 控制器的叫 ajaxReturn名称的成员方法, 很显然, 控制器中并没有叫ajaxReturn 的成员方法.

    • 也就是说, 这个 ajaxReturn 要和jquery的 ajax前端请求, 相配合使用, 前端还是 普通的 ajax请求 写法. ajax请求 的地址 还是 控制器的一个
      普通的成员方法, 比如叫 ajaxHandler,

  • 相关阅读:
    js 保留两位小数 input要求是数字框,
    ionic实现滑动的三种方式
    如何在只封装异步请求的两个接口中实现同步请求
    ng-trim
    ng-repeat
    angular.js开发 将多页面开发成单页面
    接口
    记忆
    心情
    最小化安装CentOS-7-x86_64-Minimal-1511图文教程
  • 原文地址:https://www.cnblogs.com/bkylee/p/9047002.html
Copyright © 2011-2022 走看看