本文目录一览:
- 1、thinkphp5 自动加载的类 怎么使用
- 2、ThinkPHP遇到的类私有变量赋值问题
- 3、thinkphp 怎么创建一个类,只能让其他的类来调用这个类,而外部不以访问?
- 4、用thinkPHP可以实现数组的分页显示吗
- 5、如何在thinkphp里面自定义类
- 6、thinkphp主要有什么用
thinkphp5 自动加载的类 怎么使用
ThinkPHP的类库主要包括公共类库和应用类库,都是基于命名空间进行定义和扩展的。只要按照规范定义,都可以实现自动加载。
类库存放位置:
Think目录:系统核心类库
Org目录:第三方公共类库
这些目录下面的类库都可以自动加载,只要把相应的类库放入目录中,然后添加或者修改命名空间定义。你可以在Org/Util/目录下面添加一个Image.class.php
文件,然后添加命名空间如下:
namespace Org\Util;
class Image {
}
这样,就可以用下面的方式直接实例化Image类了:$image = new \Org\Util\Image;
公共类库除了在系统的Library目录之外,还可以自定义其他的命名空间,只需要注册一个新的命名空间,在应用或者模块配置文件中添加下面的设置参数:
'AUTOLOAD_NAMESPACE' = array(
'Lib' = APP_PATH.'Lib',
)
如果类库没有采用命名空间的话,需要使用import方法先加载类库文件,然后再进行实例化,例如:定义了一个Counter类(位于Com/Sina/Util/Counter.class.php):
import('Com.Sina.Util.Couter');
$object = new \Counter();
ThinkPHP遇到的类私有变量赋值问题
Home\Common\Map.class.php文件
?php
namespace Home\Common;
class Map {
static function getName() {
$map = array(
'0' = '张三',
'1' = '李四',
'2' = '王五',
'3' = '赵六'
);
return $map;
}
}
Home\Controller\IndexController.class.php文件
?php
namespace Home\Controller;
use Think\Controller;
use Home\Common\Map as map;
class IndexController extends Controller {
private $sex = array(0,1);
private $name = map::getName(); // 写法1
// 测试 静态函数 类私有变量赋值
public function getName() {
$name = map::getName(); // 写法2
var_dump($name);
}
}
其中,写法1出错,显示:
写法2显示:
如果想私有变量赋值,可以构造函数赋值,即在__construct()里赋值:
$this-name = map::getName(); // 注意千万别写成$this-$name
类的变量成员叫做“属性”,或者叫“字段”、“特征”。属性声明是由关键字 public , protected 或者 private 开头,然后跟一个普通的变量声明来组成。 属性中的变量可以初始化,但是初始化的值必须是常数 ,这里的常数是指 PHP 脚本在编译阶段时就可以得到其值,而不依赖于运行时的信息才能求值。-thinkphp类可以
在类的成员方法里面,可以用 - (对象运算符):$this - property(其中 property 是该属性名)这种方式来访问 非静态属性 。 静态属性 则是用 :: (双冒号):self::$property 来访问。-thinkphp类可以
当一个方法在类定义内部被调用时,有一个可用的伪变量 $this。$this 是一个到主叫对象的引用(通常是该方法所从属的对象,但如果是从第二个对象 静态 调用时也可能是另一个对象)。
具体请参考:
thinkphp 怎么创建一个类,只能让其他的类来调用这个类,而外部不以访问?
外部本来就不能访问thinkphp的类,你说的应该是函数吧。
如果只是自身class访问的话用private声明
如果还允许继承访问的话用protected声明
另外thinkphp不允许外部调用“_”下划线开头的方法,即使这个方法用public声明。
用thinkPHP可以实现数组的分页显示吗
在thinkphp的框架下实现分页。公司的网站基于Thinkphp框架,一直久闻thinkphp的大名,终于有机会实战了。thinkphp是MVC架构的,MVC对于任何ITers来说都不陌生,模型(model)-视图(view)-控制器(controller)。他将逻辑和数据分开处理,少了很多繁琐的过程。其实在官方的资料中已经详细的介绍了怎么分页,传送门:-thinkphp类可以
可是并不适用于数据已经从DB中取出,并且转换为数组的情况,我接触PHP满打满算2个月,接触thinkphp不过3周。之前把很多时间花在了官方文档上,去熟悉thinkphp。也算是磨刀不误砍柴工吧。这里把官方文档当作比较进行阐述:-thinkphp类可以
(只举文档上第一个方法):利用Page类和limit方法,代码如下:
复制代码 代码如下:
$User = M('User'); // 实例化User对象
$count= $User-where('status=1')-count();// 查询满足要求的总记录数
$Page = new \Think\Page($count,25);// 实例化分页类 传入总记录数和每页显示的记录数(25)
$show = $Page-show();// 分页显示输出
// 进行分页数据查询 注意limit方法的参数要使用Page类的属性
$list = $User-where('status=1')-order('create_time')-limit($Page-firstRow.','.$Page-listRows)-select();-thinkphp类可以
$this-assign('list',$list);// 赋值数据集
$this-assign('page',$show);// 赋值分页输出
$this-display(); // 输出模板
基本思想就是先计算总的记录数,然后根据所设置的每页显示的记录数来分页。使用Thinkphp封装好的Page类可以很方便的实现。实现的重点在第11行,limit方法就是按照一定的规则从查询数据中抽取数据。但是数据已经取出又怎么办呢?-thinkphp类可以
我们用到了php自带的函数array_slice( )。定义在此:
其实就是数组版的limit方法。好了,工具找到了,实现就很容易了。直接上代码:
复制代码 代码如下:
public function nodeslist(){
$portal = new PortalApi;
$nodelist = $portal-getNodeLists($this-uid);
$count = count($nodelist['data']);
$p = new Page($count,10);
$lists = array_slice($nodelist['data'], $p-firstRow,$p-listRows);
$page = $p-show();
$this-assign('page',$page);
$this-assign('nodes',$lists);
$this-display();
}
代码有删减,只保留实现细节。
第3行getNodeLists方法从数据库中取出数据并赋值给数组nodelist。
第5行count计算出数组元素的个数。
第6行为Page类传入参数。
第7行的array_slice函数代替了limit方法。原理相同。
第9行用assign方法为模版赋值。定义在此:
第10行同理。
下面是view中的代码:
复制代码 代码如下:
div class="page-list"
{$page}
/div
如果仅仅这样的话,显示出来的效果并不友好。再找出来Page类的定义:
复制代码 代码如下:
// 分页显示定制
private $config= array(
'header' = 'span class="rows"共 %TOTAL_ROW% 条记录/span',
'prev' = '上一页',
'next' = '下一页',
'first'= '第一页',
'last' = '...%TOTAL_PAGE%',
'theme'= '%FIRST% %UP_PAGE% %LINK_PAGE% %DOWN_PAGE% %END%',
在页数前后加入空格。现在可以看效果了:
如何在thinkphp里面自定义类
类文件都是以.class.php为后缀(这里是指的ThinkPHP内部使用的类库文件,不代表外部加载的类库文件),使用驼峰法命名,并且首字母大写,例如 DbMysql.class.php;
类的命名空间地址和所在的路径地址一致,例如 Home\Controller\UserController类所在的路径应该是 Application/Home/Controller/UserController.class.php; -thinkphp类可以
确保文件的命名和调用大小写一致,是由于在类Unix系统上面,对大小写是敏感的(而ThinkPHP在调试模式下面,即使在Windows平台也会严格检查大小写);
类名和文件名一致(包括上面说的大小写一致),例如 UserController类的文件命名是UserController.class.php, InfoModel类的文件名是InfoModel.class.php, 并且不同的类库的类命名有一定的规范; -thinkphp类可以
打开一个thinkphp里面自带的类文件对照着理解就好了
类的导入加载可以参考手册的命名空间和自动加载,下面是地址:
命名空间:
自动加载:
thinkphp主要有什么用
1、他是一个国人开发的php框架,本质上就是相当于将代码逻辑解耦出来,分模块管理,增强类与方法的重用的同时更好的规范代码编写结构,方便二次开发。另外一个就是封装好很多功能,如数据库连接,缓存处理等,可以直接使用以达到快速开发的目的。-thinkphp类可以
2、正如上个问题所说,他是一个国人开发的php框架,意思就是原生文档就是中文的,在我国php使用中占了相对较大的比重,所以一些常见问题可以很容易找到答案。你可以拿他来熟悉框架原理,以及开发一些日常的后台程序,快且简单。但是所有框架的好处都是以损耗性能为前提的,号称速度最快的yaf框架都会比原生php增加10%损耗(官方数据)-thinkphp类可以
综上所述,php框架有很多,主要是方便大家快速开发与减少二次开发工作量的,但本质还是php语言。很多人学习了TP之后就不会用php来做一些基本操作了(上面提到他有很多方法类已经封装好直接用就可以了)。所以最好是学习好php,理解框架的原理,这样无论公司要求你用哪个框架你都能快速上手,否则职业生涯发展会受到限制-thinkphp类可以