首页 > 编程语言 >#yyds干货盘点#PHP的_initialize() 区别 __construct()

#yyds干货盘点#PHP的_initialize() 区别 __construct()

时间:2022-12-15 23:09:31浏览次数:55  
标签:__ yyds 调用 子类 construct initialize 父类 构造函数

  • _initialize()方法是在任何方法执行之前,都要执行的,当然也包括 __construct构造函数。 也就是说如果存在_initialize()函数,调用对象的任何方法都会导致_initialize()函数的自动调用,而__construct()构造函数仅仅在创建对象的时候调用一次,跟其它方法调用没有关系。
  • __construct这里是双划线,而_initialize()函数是单划线
  • 如果父子类均有_initialize()函数,则子类覆盖了父类的,如果子类没有而父类有,则子类继承父类的。
  • 默认情况下,子类的构造函数不会自动调用父类的构造函数。在调用子类对象的_initialize()时,也不会导致自动调用父类的_initialize()
  • 实际编写子类的构造函数时,一般都要加上父类构造函数的主动调用parent::__construct(),否则会导致子类对象空指针的异常,如Call to a member function assign() on a non-object。

故在一些系统后台管理或者评论功能上,可使相关的控制器extends于base控制器:

Base.php:

<?php
namespace app\admin\controller;
use think\Controller;
class Base extends Controller
{
public function _initialize(){
if(!session('username')){
$this->error('请先登录系统!','Login/index');
}
}
}

Article.php

<?php
namespace app\Admin\controller;
use app\Admin\model\Article as ArticleModel;
use app\admin\controller\Base;
class Article extends Base
{
……… ………
}

这样一来,当Article控制器的任何方法执行前都会先执行Base.php中的_initialize()方法进行检测是否已经登录,无需创建对象。

标签:__,yyds,调用,子类,construct,initialize,父类,构造函数
From: https://blog.51cto.com/u_11365839/5946611

相关文章

  • Docker容器安装与基本使用
    一、Docker概述1、docker概述docker是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的linux机器上,也可以实现虚拟化......
  • listview滑动删除
    今天还是给大家带来自定义控件的编写,自定义一个ListView的左右滑动删除Item的效果,这个效果之前已经实现过了,有兴趣的可以看下​​Android使用Scroller实现绚丽的ListView左......
  • Java广度优先爬虫示例
    这个爬虫是近半个月前学习爬虫技术的一个小例子,比较简单,怕时间久了会忘,这里简单总结一下.主要用到的外部Jar包有HttpClient4.3.4,HtmlParser2.1,使用的开发工具(IDE......
  • 谈谈网站静态化
    写在前头静态化是解决减轻网站压力,提高网站访问速度的常用方案,但在强调交互的We2.0 时代,对静态化提出了更高的要求,静态不仅要能静,还要能动,下面我通过一个项目,谈谈网......
  • 15 个很棒的 Bootstrap UI 界面编辑器
    [导读]​​BootstrapMagic​​​​BootSwatchr​​​​BootstrapLiveEditor​​​​FancyBoot​​ ​​StyleBootstrap​​​​Lavish​​​​BootstrapThemeRol......
  • 学习Hadoop不错的系列文章
    学习Hadoop不错的系列文章 1)Hadoop学习总结 (1)​​HDFS简介​​ (2)​​HDFS读写过程解析​​ (3)​​Map-Reduce入门​​ (4)​​Map-Reduce的过程解析​​ (5)​​Hadoop的运......
  • 从零开始学习jQuery (三) 管理jQuery包装集
    [导读]一.摘要在使用jQuery选择器获取到jQuery包装集后,我们需要对其进行操作.本章首先讲解如何动态的创建元素,接着学习如何管理jQuery包装集,比如添加,删除,切片等.......
  • C语言中将二维数组作为函数参数来传递
    c语言中经常需要通过函数传递二维数组,有三种方法可以实现,如下:方法一, 形参给出第二维的长度。例如:#include<stdio.h>voidfunc(intn,char str[][5]){ inti; f......
  • 结构体定义 typedef struct 用法详解和用法小结
    typedef可以声明新的类型名来代替已有的类型名,但却不能增加新的类型。typedef为C语言的关键字,作用是为一种数据类型定义一个新名字。这里的数据类型包括内部数据类型......
  • sublime text3 3126 安装配置
    下载​​http://www.sublimetext.com/3​​​序列号如下:支持版本号3126—–BEGINLICENSE—–MichaelBarnesSingleUserLicenseEA7E-8213858......