类的Php重载函数问题

类的Php重载函数问题,php,function,class,overloading,Php,Function,Class,Overloading,我有一个叫做ClientPolicy的类,它是这样的 class ClientPolicy { var $serverHost="www.example.com"; var $httpPort = 80; var $httpsPort = 443; var $appKey; var $secKey; var $defaultContentCharset = "UTF-8"; } 还有另一个类文件名SyncapicClient,如下所示 c

我有一个叫做ClientPolicy的类,它是这样的

    class ClientPolicy {
    var $serverHost="www.example.com";
    var $httpPort = 80;
    var $httpsPort = 443;
    var $appKey;
    var $secKey;
    var $defaultContentCharset = "UTF-8";
}
还有另一个类文件名SyncapicClient,如下所示

class SyncAPIClient{

    function SyncAPIClient(ClientPolicy $clientPolicy) {
        $this->clientPolicy = $clientPolicy;
    }

     function SyncAPIClient($appKey, $appSecret) {
        $this->clientPolicy = new ClientPolicy();
        $this->clientPolicy->appKey=$appKey;
        $this->clientPolicy->secKey=$appSecret;
    }

}
我的问题是

1.)如果您检查SyncapicClient中的函数,您会注意到ClientPolicy类是作为变量之前的参数传递的,它的真正含义是什么?在函数参数中传递类的本质是什么

2.)我在脚本日志中收到一个错误“无法重新声明SyncApicClient::SyncApicClient()”,原因是SyncApicClient类中调用了两次SyncApicClient函数。我如何解决这个问题?有没有更好的方法来编写这个SyncAPIClient函数而不是将其传递两次

找不到此脚本的作者,我只能修复它。

1)这里传递给此函数的
$clientPolicy
变量需要是clientPolicy实例

这样,如果传递的参数与
ClientPolice
类的实例不同,则会生成错误

函数SyncAPIClient(ClientPolicy$ClientPolicy){
$this->clientPolicy=$clientPolicy;
}

2) 错误
无法重新声明SyncapClient::SyncapClient()
,原因是您试图声明两个名为
SyncapClient()
的函数

如果在第一个
SyncAPIClient()
方法中,您只想在
$this->clientPolicy
中保存
$clientPolicy
,则可以使用神奇的方法
\u构造
。或者只是尝试更改其中一个函数的名称,问题应该是个问题

class-SyncAPIClient{
__构造(ClientPolicy$ClientPolicy){
$this->clientPolicy=$clientPolicy;
}
函数SyncAPIClient($appKey,$appSecret){
$this->clientPolicy=new clientPolicy();
$this->clientPolicy->appKey=$appKey;
$this->clientPolicy->secKey=$appSecret;
}
}

希望这有帮助

1)此处传递给此函数的
$clientPolicy
变量需要是clientPolicy实例

这样,如果传递的参数与
ClientPolice
类的实例不同,则会生成错误

函数SyncAPIClient(ClientPolicy$ClientPolicy){
$this->clientPolicy=$clientPolicy;
}

2) 错误
无法重新声明SyncapClient::SyncapClient()
,原因是您试图声明两个名为
SyncapClient()
的函数

如果在第一个
SyncAPIClient()
方法中,您只想在
$this->clientPolicy
中保存
$clientPolicy
,则可以使用神奇的方法
\u构造
。或者只是尝试更改其中一个函数的名称,问题应该是个问题

class-SyncAPIClient{
__构造(ClientPolicy$ClientPolicy){
$this->clientPolicy=$clientPolicy;
}
函数SyncAPIClient($appKey,$appSecret){
$this->clientPolicy=new clientPolicy();
$this->clientPolicy->appKey=$appKey;
$this->clientPolicy->secKey=$appSecret;
}
}


希望这有帮助

我会像这样修复您的代码:

class SyncAPIClient
{
    private $clientPolicy = null;

    function SyncAPIClient(ClientPolicy $clientPolicy = null) 
    {
        if($clientPolicy instanceof ClientPolicy){
            $this->clientPolicy = $clientPolicy;
        }else{
            $this->clientPolicy = new ClientPolicy();
        }
    }

    public function setAuthParams($appKey, $appSecret) {
        $this->clientPolicy->appKey=$appKey;
        $this->clientPolicy->secKey=$appSecret;
    }   
}
通过这种方式,您可以实例化带有或不带有
ClientPolicy
SyncAPIClient

没有
ClientPolicy

$syncAPI = new SyncAPIClient();
$syncAPI->setAuthParams($apiKey, $apiSecret);
$clientPolicy = new ClientPolicy();
$clientPolicy->appKey=$appKey;
$clientPolicy->secKey=$appSecret;
$syncAPI = new SyncAPIClient($clientPolicy);
使用
ClientPolicy

$syncAPI = new SyncAPIClient();
$syncAPI->setAuthParams($apiKey, $apiSecret);
$clientPolicy = new ClientPolicy();
$clientPolicy->appKey=$appKey;
$clientPolicy->secKey=$appSecret;
$syncAPI = new SyncAPIClient($clientPolicy);

我会像这样修复您的代码:

class SyncAPIClient
{
    private $clientPolicy = null;

    function SyncAPIClient(ClientPolicy $clientPolicy = null) 
    {
        if($clientPolicy instanceof ClientPolicy){
            $this->clientPolicy = $clientPolicy;
        }else{
            $this->clientPolicy = new ClientPolicy();
        }
    }

    public function setAuthParams($appKey, $appSecret) {
        $this->clientPolicy->appKey=$appKey;
        $this->clientPolicy->secKey=$appSecret;
    }   
}
通过这种方式,您可以实例化带有或不带有
ClientPolicy
SyncAPIClient

没有
ClientPolicy

$syncAPI = new SyncAPIClient();
$syncAPI->setAuthParams($apiKey, $apiSecret);
$clientPolicy = new ClientPolicy();
$clientPolicy->appKey=$appKey;
$clientPolicy->secKey=$appSecret;
$syncAPI = new SyncAPIClient($clientPolicy);
使用
ClientPolicy

$syncAPI = new SyncAPIClient();
$syncAPI->setAuthParams($apiKey, $apiSecret);
$clientPolicy = new ClientPolicy();
$clientPolicy->appKey=$appKey;
$clientPolicy->secKey=$appSecret;
$syncAPI = new SyncAPIClient($clientPolicy);

在组合使用类和函数时,如

Rtin::
嵌套在该类Rtin中的函数应具有与该类名不同的名称 所以您不应该使用名为rtin的函数 但是,您可以从类外部使用其名称调用函数

您所犯的错误可能是由于:

嵌套在类中的函数或类外部的函数在脚本本身外部具有重复项。就像included function.php文件中提到的函数,以及脚本本身中提到的函数一样,php会感到困惑,因为函数名同时写在两个php文件中

课堂范例

class Rtin{

private $data;
private $results;

public function getResultsType(){
    return ........
}
}
调用类使用

$q = Rtin::getResultsType($data['name']);

在你的例子中。使其适应我提供的示例,并查看包含的文件中的重复函数。

在组合使用类和函数时,如

Rtin::
嵌套在该类Rtin中的函数应具有与该类名不同的名称 所以您不应该使用名为rtin的函数 但是,您可以从类外部使用其名称调用函数

您所犯的错误可能是由于:

嵌套在类中的函数或类外部的函数在脚本本身外部具有重复项。就像included function.php文件中提到的函数,以及脚本本身中提到的函数一样,php会感到困惑,因为函数名同时写在两个php文件中

课堂范例

class Rtin{

private $data;
private $results;

public function getResultsType(){
    return ........
}
}
调用类使用

$q = Rtin::getResultsType($data['name']);

在你的例子中。根据我提供的示例进行调整,并查看包含的重复函数文件。

在PHP中不需要使用
var
。但是,您应该设置不能在中重载任何方法的PHP@RahulMeshram这是类型暗示。在PHP中不需要使用
var
。但是,您应该设置不能在中重载任何方法的PHP@RahulMeshram这是打字暗示。