php构造函数的使用

博客介绍了PHP构造方法,它是类中的特殊方法,使用new创建类实例时自动调用,名称为__construct(),用于执行初始化任务且无返回值。还提到在TP 5.0版本因无中间件支持,通过新建Base.php、控制器继承它,在构造函数中验证用户身份。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

什么是构造方法(函数)?
构造(函数)方法是类中的一个特殊方法。当使用 new 操作符创建一个类的实例时,构造方法将会自动调用,其名称必须是 __construct()。
在一个类中只能声明一个构造方法,而是只有在每次创建对象的时候都会去调用一次构造方法,不能主动的调用这个方法,所以通常用它执行一些有用的初始化任务。该方法无返回值。

<?php
/**
 * Created by PhpStorm.
 * User: liudandan
 * Date: 2018/5/13
 * Time: 11:50
 */
class BaseClass {
    function __construct()
    {
        print "我是构造函数\n";
    }
}

class SubClass extends BaseClass {
    function __construct()
    {
        parent::__construct();
        print "我是 SubClass 下的构造函数\n";
    }
}

class OtherSubClass extends BaseClass {

}
$obj = new BaseClass();
$obj = new SubClass();
$obj = new OtherSubClass();
?>

之前的项目中需要给app提供接口,由于TP是在5.1.6+才正式引入中间件的支持(使用的版本5.0),所以不能在中间件中验证用户身份,解决方案如下
新建Base.php

<?php
namespace app\api\controller;
use think\Controller;
use think\Request;
class Base extends Controller
{
	public function __construct(Request $request = null)
	{
        parent::__construct($request);
        // 检测私钥和token
       	$private_key	= input('post.private_key', '', 'trim');
		$token			= input('post.token', '', 'trim');
		//获取控制器及方法名
        $controller_name = $request->controller();
        $action_name = $request->action();
        $route = $controller_name.'/'.$action_name;
       //定义未登录状态允许访问的控制器/方法
        /**
         * 未登录状态允许访问的控制器/方法
         * 方法名取小写
        */
        $allow_route = [
            'Goods/goodslist',
            'Article/articleindex',
            'Article/articledetail'
        ];
        if (!in_array($route,$allow_route))
        {
        	//验证用户身份
            $data = $this->tokenProving($private_key, $token);
            if($data['code'] == 500)
            {
                echo json_encode($data);die;
            }
            else
            {
                //获取用户身份
                //$this->user_id = 
            }

        }
        else
        {
           //获取用户身份
           //$this->user_id = 
        }
		
    }
    // 检测私钥和token
    private function tokenProving($private_key, $token)
	{
		if(empty($private_key) || empty($token))
		{
			$data['code'] = 500;
			$data['msg'] = '重要参数丢失';
			$data['data'] = (object)array();
			return $data;
		}
        //一系列的验证
    }
	
}
?>

控制器继承Base.php

<?php
namespace app\api\controller;
use think\Db;
use app\api\model;
class User extends Base
{
	public function index()
	{
		//获取user_id
        $user_id = $this->user_id;
        
    }
  }
?>

这样就可以在构造函数中验证用户身份了

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值