php中_initialize()函数与 __construct()函数的区别说明

_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()方法进行检测是否已经登录,无需创建对象。

相关推荐:

php中explode()函数与strtok()函数的区别

php中method_exists()与is_callable()函数的区别分析

http://www.php.cn/php-weizijiaocheng-408637.html

转载于:https://www.cnblogs.com/lxwphp/p/11104245.html

在SPDK,要把自己的函数注册到RPC,可以参考以下步骤: 1. 定义一个结构体,用于存储你的函数的参数和返回值。 2. 编写你的函数,并将其转换为RPC调用函数。SPDK提供了一些宏来帮助你完成这个过程。例如,可以使用SPDK_RPC_REGISTER_FUNC宏将你的函数注册到RPC。 3. 在SPDK启动RPC服务。在你的应用程序,可以使用spdk_rpc_initialize函数来启动RPC服务。 4. 在客户端上使用SPDK的rpc.py脚本来调用你的函数。这个脚本会与SPDK的RPC服务器通信,并向服务器发送请求。 下面是一个示例代码,展示了如何将一个函数注册到SPDK的RPC: ```c struct my_rpc_args { int arg1; int arg2; int ret; }; static void my_rpc_func(struct spdk_jsonrpc_request *request, const struct spdk_json_val *params) { struct my_rpc_args args = {}; spdk_json_decode_object(params, spdk_json_decode_int32, &args.arg1, spdk_json_decode_int32, &args.arg2, SPDK_JSON_OBJECT_END); args.ret = my_function(args.arg1, args.arg2); spdk_jsonrpc_send_response(request, spdk_jsonrpc_construct_response_fmt(request, "{ \"ret\": %d }", args.ret)); } SPDK_RPC_REGISTER("my_rpc_func", my_rpc_func, SPDK_RPC_RUNTIME) ``` 在这个例子,我们定义了一个名为“my_rpc_args”的结构体,用于存储函数参数和返回值。我们还定义了一个名为“my_rpc_func”的函数,并使用SPDK_RPC_REGISTER宏将其注册到RPC。最后,在函数,我们将参数从JSON对象解码为我们的结构体,并使用我们的函数计算结果。最终,我们将结果编码为JSON对象,并将其作为响应发送回客户端。 请注意,这只是一个简单的例子,实际上你需要根据你的函数的参数和返回值进行更改,并确保你的函数能够正确地处理它们。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值