Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/249.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何强制调用方法_Php - Fatal编程技术网

Php 如何强制调用方法

Php 如何强制调用方法,php,Php,我正在创建一个API,我有一个名为Service的类,它有一个函数requireType() $type是GET、PUT、POST或DELETE final public function requireType($type){ // Do some stuff } 我还有一个名为API的主类,它创建了一个从API调用的类的实例,让我们调用ClassA,然后扩展Service class ClassA extends Service{ // Writer called "$t

我正在创建一个API,我有一个名为
Service
的类,它有一个函数
requireType()

$type
GET
PUT
POST
DELETE

final public function requireType($type){
    // Do some stuff
}
我还有一个名为
API
的主类,它创建了一个从
API
调用的类的实例,让我们调用
ClassA
,然后扩展
Service

class ClassA extends Service{

    // Writer called "$this->requireType()" method is fine to run
    public function myAction(){
        // Make sure $this->requireType() was called here before anything else gets run
        $this->requireType("POST");
        // Do some stuff
    }

    // Writer did not call "$this->requireType()" method
    // An error should occur
    public function myAction(){
        // Do some stuff
    }
}
我想知道的是,在我的
API
类中,我如何(如果可能)检查
requireType()
是否在
myAction()中立即被调用

API类方法调用如下所示(简化):

因此,最后我想要这样的东西:

来自
example.com
的客户端向
api发送
PUT
请求。example2.com
api。example2com
知道客户端发送了什么。被调用的方法不知道,它需要说明如果要调用我,您需要发送一个
GET
请求,如果不需要,您需要发送另一个带有
GET
头的请求,以便访问此方法


我主要想添加此功能,以便创建新方法的开发人员不会意外地编写接受4种头类型中任何一种的代码。

我会将构造函数放在
服务
类中:

class Service {
  final public function __construct($type) {
    $this->requireType($type);
  }
}
abstract class Service {
  final public function myAction($type) {
    $this->requireType($type);
    $this->customAction();
  }
  protected function customAction();
}
这样,从服务扩展的任何类都必须使用
$type
构造并调用函数

或者,如果对
myAction()
的每个调用都有不同的类型很重要,那么您可以在
服务中有一个抽象方法和一个已定义的方法
类:

class Service {
  final public function __construct($type) {
    $this->requireType($type);
  }
}
abstract class Service {
  final public function myAction($type) {
    $this->requireType($type);
    $this->customAction();
  }
  protected function customAction();
}

这样,每个人都用他们想要的类型(由php强制)调用
myAction()
,然后
myAction()
调用
customAction()
(必须在基本控制器构造函数的扩展类中定义),将名为“CalledRequestType”的实例变量设置为false

在requireType中,将CalledRequestType设置为true


在。。。无论您想检查它们是否调用了它(可能是调用xxAction后调用xxAction的同一个处理程序),请检查CalledRequestType并抛出异常。

好吧。。。第。。什么?您能在想知道是否调用了
requireType()
的那一行添加注释吗?基本上,我只想确保在扩展
Service
的类中编写新公共方法的人在启动该方法时调用
$this->requireType()
$type
对于每个方法都是不同的。这就是为什么要将它作为参数传递给类扩展服务。这不起作用
MethodA
可能需要
POST
,而
MethodB
可能需要
GET
如果通过构造函数,则无法为每个方法创建它。这有设计的味道问题如果他们必须在使用任何函数之前调用requireType,那么您很可能应该重新考虑您的类?您正在使用接口吗?抽象类?为什么必须调用requireType,但还不清楚他们是否必须管理它?好吧,也许这会更清楚:客户端
example.com
api发送
PUT
请求。example2.com
api
知道客户端发送的方法需要说明什么,如果您要调用我您需要的话发送
GET
请求,而不是
PUT
请求。请再试一次。他们将编写执行检查的函数,而不是op:)在这种情况下,请将CalledRequestType放入他们正在扩展的基类中。我会更新我的答案