再谈 tp的 实例化 类 的自动加载
表示一个域名下的所有/任何主机 使用 的格式是: [*.] example.com 其中 , example.com叫着 裸域名. (这个example.com/net/org不能被注册, 被保留) 其中 [*.] 中的 点 要放在 括号内.
tp的类自动加载, 总的来说 分两大类
- 一类是 使用 命名空间的, 这个也是 tp推荐的方式, 可以实现自动加载
- 另一类是 不使用 命名空间的.
要实现 自动加载, 需要遵循 以下规定:
- 是要用 命名空间 来定义;
- 是 类的命名要符合 规范, 包括 驼峰命名 和 类的后缀必须是 .class.php
- 是 类文件 的 物理位置 必须 和 命名空间的路径 一致.
- 只要按照上面的规定来做, 就可以实现 自动加载.
- 系统默认的 可以自动加载的类库是: 第一个是 框架的 Library下的 目录, 叫公共类库, 可以自动加载, 不需要任何说明的; 第二个是 应用类库, 即 Application项目目录下的所有目录, 包括模块目录,common目录, 或者你自己在 项目目录下创建的目录都叫 应用类库, 都可以实现 自动加载
- 另一个是 你自己增加的 /扩展的/ 注册命名空间: 使用 'AUTOLOAD_NAMESPACE' => array(...);
- 再一个是你 自己增加的 类/类库 映射, 在 项目的conf目录下创建的 alias.php 文件中的 映射.
加载的先后次序包括
首先检查 alias.php的类映射, 然后是 Library下的 公共类库, 然后是 你 注册的 扩展命名空间, 最后是 应用类库.
第二类就是 , 除了上面的 可以自动加载的 类库, 你想找挫折的时候, 要用 import(...) 来引入的类库(一个类文件, 最好就是 只包含一个 类的 定义)
- 没有使用 tp的规范 命名, 比如没有遵循 驼峰命名法.
- 类的扩展名不是 .class.php, 而是直接用 className.php 来命名的
- 没有使用 命名空间
- 虽然使用了命名空间, 但是 物理路径 /位置, 和 命名空间表示的 不一致.
这几种情况, 都可以用 import来做:
- import的格式
import('类名' [, '类的路径' [, '类的扩展名比如php']] - 通常 import 可以自动识别的 类的 位置 是 公共类库 和应用类库的 位置 , 如果 不是这两个, 那么就要使用 第二个参数 指明 类的位置, 如果类的扩展名不是 .class.php 就要使用 'php'
关于tp的ajaxReturn的使用
在php中实例化一个 php的 原生对象, 使用的是: $o = new \stdClass(); 是用 staClass 而不是 new \Object(), 会提示 没有叫 Object的类.
在tp的控制器中, 指定类的实例化路径时, 因为 你的代码是写在 类定义 的 方法中的, 类定义的 前面是 namespace命名空间,
命名空间默认的 通常是: namespace Home\Controller 就是说 , 方法中所有的 类实例化的时候, 如果不写 "根命名空间", 那么就是引用的
当前命名空间 即: Home\Controller目录中的类. 所以 会报错: Home\Controller中没有这样的类.
**实例化类时, 要使用 "完全限定 命名空间", 即从 反斜杠开始的 根 命名空间, 那么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,
再谈 tp的 实例化 类 的自动加载的更多相关文章
- thinkphp系列:类的自动加载是如何设计的
在使用框架开发时,可以发现框架有很多核心类,却很少看到显示的引入某个文件的代码,这是因为框架都采用了类的自动加载机制,即使用到类时,框架会自动找到该类所在文件的位置并引入该文件.为了更容易看出代码思路 ...
- 浅析PHP类的自动加载和命名空间
php是使用require(require_once)和include(include_once)关键字加载类文件.但是在实际的开发工程中我们基本上不会去使用这些关键字去加载类. 因为这样做会使得代码 ...
- Yaf零基础学习总结5-Yaf类的自动加载
Yaf零基础学习总结5-Yaf类的自动加载 框架的一个重要功能就是类的自动加载了,在第一个demo的时候我们就约定自己的项目的目录结构,框架就基于这个目录结构来自动加载需要的类文件. Yaf在自启动的 ...
- final关键字,类的自动加载,命名空间
final关键字 1.final可以修饰方法和类,但是不能修饰属性: 2.Final修饰的类不能被继承: 3.Fina修饰的方法不能被重写,子类可以对已被final修饰的父类进行访问,但是不能对父类的 ...
- PHP面向对象学习-属性 类常量 类的自动加载 构造函数和析构函数 访问控制(可见性)
在类的成员方法里面,可以用 ->(对象运算符):$this->property(其中 property 是该属性名)这种方式来访问非静态属性.静态属性则是用 ::(双冒号):self::$ ...
- PHP面向对象----- 类的自动加载
1.类的自动加载 spl_autoload_register函数 test.php <?php spl_autoload_register('autoload'); // require_onc ...
- tp5底层源码分析之------tp5.1类的自动加载机制
tp框架作为国内主流框架,目前已经发布了6.0版本,相当于3.*版本是进行了重构,今天我们从源码的角度来研究下tp5.1自动加载的实现 作为单入口框架,从入口文件看起,入口文件在public/下,那么 ...
- php composer 实现类的自动加载
我们在开发项目中会经常用到第三方的类库插件,但是如果每次需要使用的时候都会在代码的某一处去引入,然后在实例化,这样做感觉很不方便,那么怎么实现自动加载呢,下面简单介绍使用composer实现自动加载: ...
- Drupal如何实现类的自动加载?
Drupal通过spl_autoload_register()注册类加载器实现自动加载: function _drupal_bootstrap_database() { // ... .... spl ...
随机推荐
- Oracle中找出用户的上次登录时间
可以使用如下sql语句: select t1.username,t1.logon_time last_logon_time,t2.account_status,created 账号创建时间 from ...
- featuremap尺寸的计算
对于卷积层,向下取整 对于池化层:想上取整 output=((input+2*pad-dilation*(kernel-1)+1)/stride)+1 input:输入尺寸 output:输出尺寸 p ...
- c#之正则表达式
一,C#正则表达式符号模式 字 符 描 述 \ 转义字符,将一个具有特殊功能的字符转义为一个普通字符,或反过来 ^ 匹配输入字符串的开始位置 $ 匹配输入字符串的结束位置 * 匹配前面的零次或多次的子 ...
- leetcode Sort List 对链表进行排序
描述: Sort a linked list in O(n log n) time using constant space complexity. 在O(n*log(n))的时间复杂度,常数级空间复 ...
- scrapy:get cookie from response
scrapy shell fetch('your_url') response.headers.getlist("Set-Cookie")https://stackoverflow ...
- uva 12222 Mountain Road
题意: 有一个单行道,两个方向都有车在等待.给出每个车的方向以及到达的时间以及走完这段路所需要的时间. 为了防止车祸,同向两车通过任一点的时间间隔不得小于10s. 求最后一辆车离开时刻的最小值. 思路 ...
- [openjudge-动态规划]买书
题目描述 描述 小明手里有n元钱全部用来买书,书的价格为10元,20元,50元,100元.问小明有多少种买书方案?(每种书可购买多本) 输入 一个整数 n,代表总共钱数.(0 <= n < ...
- STL容器之map
[1]map容器 map 是关联容器.容器中的每一个元素都是由一个键值和一个数据值组成的. set 是一个集合它以其元素作为键值(同一个键值只能出现一次),且默认以升序排列. list 是一个顺序容器 ...
- rabbitmq和redis用作消息队列的区别
将redis发布订阅模式用做消息队列和rabbitmq的区别: 可靠性redis :没有相应的机制保证消息的可靠消费,如果发布者发布一条消息,而没有对应的订阅者的话,这条消息将丢失,不会存在内存中:r ...
- flask请求钩子、HTTP响应、响应报文、重定向、手动返回错误码、修改MIME类型、jsonify()方法
请求钩子: 当我们需要对请求进行预处理和后处理时,就可以用Flask提供的回调函数(钩子),他们可用来注册在请求处理的不同阶段执行的处理函数.这些请求钩子使用装饰器实现,通过程序实例app调用,以 b ...