在建立网站的时候,你通常想着把一些共有的方法提取出来,放入一个控制器内,如果你是将业务逻辑写入了构造函数里面,那么就得注意了。

在thinkphp5.0当中,有一个初始化的方法,类似于构造函数,那就是_initialize()。

但是如果你在父类和子类当中同时使用该方法时,会将父类的_initialize()方法覆盖掉。

如下:我贴出部分代码:

class Admin extends CommonMethod
{
private $adminModel;
public function _initialize(){
$this->adminModel=new AdminModel();
}
}
<?php

namespace app\admin\controller;
use think\Controller; class CommonMethod extends Controller
{
public function _initialize(){
if(!session("username") || !session("id")){
$this->error("您尚未登录!","Login/index");
}
}
}

如上,我的Admin类继承了CommonMethod类,同时CommonMethod类也继承了Controller类。而我的Admin和Common类都有初始化方法_initialize()方法,此时如果你想要执行CommonMethod的_initialize()方法是不可行的,那么怎么办呢?

解决方案如下:

class Admin extends CommonMethod
{
private $adminModel;
public function _initialize(){
$this->adminModel=new AdminModel();
}
}
<?php

namespace app\admin\controller;
use think\Controller; class CommonMethod extends Controller
{
public function __construct(){
parent::__construct();
if(!session("username") || !session("id")){
$this->error("您尚未登录!","Login/index");
}
}
}

如上所示,我在CommonMethod里面采用了__construct()构造方法,这样就不会出现覆盖的情况了。

请一定注意:

如上所示,Controller类同样含有__construct()方法,此时子类CommonMethod如果不写parent::__construct()方法的话,同样会将父类的__construct()方法覆盖掉。

那么parent::_construct()是什么呢?

其实他表示要执行父类的构造函数,此时即使父类的构造函数被子类的覆盖掉了。因为有这句代码的实现,父类的构造函数也会被执行,就不会报错了。

Thinkphp5.0 在自己定义一个公共方法的控制器并且继承了Controller类的时候报错的更多相关文章

  1. Swift3.0语言教程获得一个公共的前缀

    Swift3.0语言教程获得一个公共的前缀 Swift3.0语言教程获得一个公共的前缀,当在一个程序中有多个字符串时,我们需要判断是否有两个字符串有公共的前缀时,是很困难的.在NSString中的co ...

  2. (1)定义闭合图形抽象类ClosedFigure定义属性:1.形状;2.定义构造方法,给形状赋值;3.定义两个抽象方法:计算面积和计算周长;4.定义一个显示方法:显示图像形状,周长,面积;

    题目显示不全,完整题目描述: (1)定义闭合图形抽象类ClosedFigure定义属性:1.形状:2.定义构造方法,给形状赋值:3.定义两个抽象方法:计算面积和计算周长:4.定义一个显示方法:显示图像 ...

  3. Mvc分页:为IQueryable定义一个扩展方法,直接反回PagedList<T>结果集

    namespace Entity{ public interface IPagedList { /// <summary> /// 记录数 /// </summary> int ...

  4. 给string定义一个扩展方法

    创建一个 static 的类,并且里面的方法也必须是static的,第一个参数是被扩展的对象,必须标注为this,使用时,必须保证namespace using进来了. 实例: using Syste ...

  5. MVC分页控件之二,为IQueryable定义一个扩展方法,直接反回PagedList<T>结果集(转)

    namespace Entity { public interface IPagedList { /// <summary> /// 记录数 /// </summary> in ...

  6. 定义一个javascript方法,实现对数组集合的正向排序

    function sortArr (arr) { var newArr = arr.map(val => parseInt(val)).sort((a, b) => a-b); newAr ...

  7. Web 平台安装程序 5.0(Microsoft Web Platform Installer) 由于修改常用选择不正确导致打开就报错

    如图: 解决方案.第一步先卸载  Web 平台安装程序 5.0 第二步   将你添加配的文件删除 第三步:重新安装就可以了

  8. PHP 文件上传注意一个地方,移动文件时要保证目标目录存在,否则报错

    move_uploaded_file ( $_FILES ["file"] ["tmp_name"], "upload/" . $fileN ...

  9. Python中高级变量类型(列表,元组,字典,字符串,公共方法...)

    高级变量类型 目标 列表 元组 字典 字符串 公共方法 变量高级 知识点回顾 Python 中数据类型可以分为 数字型 和 非数字型 数字型 整型 (int) 浮点型(float) 布尔型(bool) ...

随机推荐

  1. 8.23.1 IO-输入输出流概念

    输入输出流概念: 字节流相关的UML继承结构图: 字符流相关的UML继承结构图:    

  2. 利用JavaScript来切换样式表

    切换样式表 html页 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http:/ ...

  3. hdu 6068--Classic Quotation(kmp+DP)

    题目链接 Problem Description When online chatting, we can save what somebody said to form his ''Classic ...

  4. Keepalive之nginx调度架构

    author:JevonWei 版权声明:原创作品 单主模式Keepalive之Nginx调度 实验目的:实现Nginx调度的高可用,当一台Nginx调度器故障时,启用备用的Nginx调度,在架构中, ...

  5. oracle 索引失效的情况分析

    见:http://blog.yemou.net/article/query/info/tytfjhfascvhzxcytp54     1) 没有查询条件,或者查询条件没有建立索引 2) 在查询条件上 ...

  6. [ASP.NET MVC]笔记(一)模型和HTML辅助方法

    1.ModelState.IsValid    检验模型有效性 2.显示模型绑定(操作方法中没有参数): UpdateModel(album):模型绑定期间出错会抛出异常 TryUpdateModel ...

  7. 美国站群服务器有利于SEO优化

    美国服务器对于站群来说就是指站长为提升每个网站对搜索引擎的权重,更好的有利于seo优化,单独为该服务器下的多个网站分别配置不同的独立ip. 实际上,站群服务器跟其他服务器并没有多大差异,唯一的区别就是 ...

  8. Eslint配置

    //ESLint 4.5.0,参考了eslint官方以及alloyteam团队配置 module.exports = { parser: 'babel-eslint', parserOptions: ...

  9. Android微信登录、分享、支付

    转载需要著名出处: http://blog.csdn.net/lowprofile_coding/article/details/78004224 之前写过微信登录分享支付第一版: http://bl ...

  10. Java 多线程(三) 线程的生命周期及优先级

    线程的生命周期 线程的生命周期:一个线程从创建到消亡的过程. 如下图,表示线程生命周期中的各个状态: 线程的生命周期可以分为四个状态: 1.创建状态: 当用new操作符创建一个新的线程对象时,该线程处 ...