类的Php重载函数问题
我有一个叫做ClientPolicy的类,它是这样的类的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
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这是打字暗示。