page contents

PHP的构造函数是什么?如何使用?

什么是PHP的构造方法(函数)? 构造(函数)方法是类中的一个特殊方法。当使用 new 操作符创建一个类的实例时,构造方法将会自动调用,其名称必须是 __construct()。 在一个类中只能声明...

attachments-2021-05-Bq9DWSLi60b454c894bf0.png

什么是PHP的构造方法(函数)?

构造(函数)方法是类中的一个特殊方法。当使用 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;
        
    }
  }
?>

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

更多相关技术内容咨询欢迎前往并持续关注六星社区了解详情。

程序员编程交流QQ群:805358732

如果你想用Python开辟副业赚钱,但不熟悉爬虫与反爬虫技术,没有接单途径,也缺乏兼职经验
关注下方微信公众号:Python编程学习圈,获取价值999元全套Python入门到进阶的学习资料以及教程,还有Python技术交流群一起交流学习哦。

attachments-2022-06-LlC7mHMN62ac1d15e3fa6.jpeg

  • 发表于 2021-05-31 11:16
  • 阅读 ( 671 )
  • 分类:PHP开发

0 条评论

请先 登录 后评论
轩辕小不懂
轩辕小不懂

2403 篇文章

作家榜 »

  1. 轩辕小不懂 2403 文章
  2. 小柒 1324 文章
  3. Pack 1135 文章
  4. Nen 576 文章
  5. 王昭君 209 文章
  6. 文双 71 文章
  7. 小威 64 文章
  8. Cara 36 文章