Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/234.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.php。我希望能够从api.php类api扩展rest调用track.php中的公共函数track_osc_delivery(){}。请看下面的代码,修复起来很困难,我尝试将api.php包含到track.php中,但这对解决它没有任何好处 //rest.php class Rest { protected $request; protected $serviceName; protected $param;

如何从另一个扩展类文件调用公共类函数,因为这个问题是api.php。我希望能够从api.php类api扩展rest调用track.php中的
公共函数track_osc_delivery(){}
。请看下面的代码,修复起来很困难,我尝试将api.php包含到track.php中,但这对解决它没有任何好处

//rest.php

  class Rest {
    protected $request;
    protected $serviceName;
    protected $param;

    public function __construct(){
        if($_SERVER['REQUEST_METHOD'] !== 'POST'){
            $this->throwError(REQUEST_METHOD_NOT_VALID, 'Request Method is not valid');
        }
        $handler = fopen('php://input', 'r');
        $this->request = stream_get_contents($handler); 
        $this->validateRequest();       
    }

        public function validateParameter($fieldName, $value, $dataType, $required = true){

        }

          public function processApi(){
        $api = new API;
        $rMethod = new reflectionMethod('API', $this->serviceName);
        if(!method_exists($api, $this->serviceName)){
           $this->throwError(API_DOST_NOT_EXIST, "API does not exist");
        }
        $rMethod->invoke($api);
    }
    }
//api.php

 class Api extends Rest {
public $dbConn;  

 public function __construct(){
    parent::__construct();  
    $db = new DbConnect;
    $this->dbConn = $db->connect();

}


 public function track_osc_delivery(){

$waybill_number = $this->validateParameter('track_waybill_number', $this->param['track_waybill_number'], STRING, true);

$password_for_shipments = $this->validateParameter('track_password_sent', $this->param['track_password_sent'], STRING, true);

}
 }
//track.php

  require_once('functions.php');
   $api = new Api;
   $api->processApi();

   //WANT TO CALL public function track_osc_delivery() here
//functions.php

       spl_autoload_register(function($className){
         $path = strtolower($className) . ".php";
 if(file_exists($path)){
             require_once($path);
         } else {
             echo "File $path is not found.";
             exit();
         }

试试这个,在track.php中它应该可以工作,正如Loek所说,它是继承的,至于process api,它也可以包含在脚本中

从更改代码

 require_once('functions.php');
 $api = new Api;
 $api->processApi();


快乐编码…

试试这个,它应该可以工作,在track.php中,正如Loek所说,它是继承的,至于process api,它也可以包含在脚本中

从更改代码

 require_once('functions.php');
 $api = new Api;
 $api->processApi();


愉快的编码…

据我所知,我认为这将通过作用域解析操作符以及直接使用$api->track_osc_delivery()实现
我已经删除了一些函数的内部代码以防止出错

(1) rest.php


(2) api.php


(3) track.php



请随意询问。

据我了解,您的问题是,我认为这将通过scope resolution operator和直接使用$api->track_osc_delivery()实现的
我已经删除了一些函数的内部代码以防止出错

(1) rest.php


(2) api.php


(3) track.php



请随意询问。

$api->track\u osc\u delivery()
。@loek谢谢,这是否意味着processAPi()无效否
processApi()
是继承的,所以您可以像使用它一样使用它。请保持您的问题的原子性和简洁性,这完全是另一个问题,您自己也几乎完全回答了这个问题。为这个问题创建另一个问题是您确实遇到了问题。
$api->track\u osc\u delivery()
。?@loek谢谢,这是否意味着processAPi()无效否
processApi()
是继承的,所以您可以像使用它一样使用它。请保持您的问题的原子性和简洁性,这完全是另一个问题,您自己也几乎完全回答了这个问题。为此再提出一个问题:你真的遇到了问题。
<?php
class Rest {
    protected $request;
    protected $serviceName;
    protected $param;

    public function __construct(){
    }

    public function validateParameter($fieldName, $value, $dataType, $required = true)
    { }

    public function processApi(){
        $api = new API;
        return $api;
    }
}

?>
<?php
require_once('rest.php');
class Api extends Rest {
    public $dbConn;  

    public function __construct(){
        parent::__construct();  
    }


    public function track_osc_delivery(){
        return "function called";

    }
}

?>
<?php
require_once('api.php');
$api = new Api;
echo "<pre>";
print_r($api);
echo "</pre>";
$api->processApi();

//echo $api->track_osc_delivery(); //this will also worked.
$test = $api::track_osc_delivery();
echo $test;
?>