我正在尝试调整Amazon Simple Pay Standard PHP库以供动态使用。它被写成各种各样的按钮工厂。我发现需要编辑的代码的主要部分是第一个类,其中声明了许多变量。但是,正如您所看到的,它们都是static
:
class StandardButtonSample {
private static $accessKey = "randomKey";
private static $secretKey = "randomKey";
private static $amount="USD 10";
private static $signatureMethod="HmacSHA256";
private static $description="Test Widget";
private static $referenceId="test-reference123";
private static $abandonUrl="http://oust.cc/cancel.html";
private static $returnUrl="http://oust.cc/return.html";
private static $immediateReturn="0";
private static $processImmediate="1";
private static $ipnUrl="";
private static $collectShippingAddress=null;
private static $environment="sandbox";
public function Sampleform() {
try{
ButtonGenerator::GenerateForm(self::$accessKey,self::$secretKey,self::$amount,
self::$description, self::$referenceId, self::$immediateReturn,self::$returnUrl,
self::$abandonUrl, self::$processImmediate, self::$ipnUrl,
self::$collectShippingAddress,self::$signatureMethod, self::$environment);
}
catch(Exception $e){
echo 'Exception : ', $e->getMessage(),"\n";
}
}
}
在尝试修改它时,我很快就学会了我不能简单地将一个外部变量抛出到类中,ala $referenceId = $uid . time();
但是,我在SO上找到了一些解决方法。但是试图使用它们会带来一个问题 - 也就是说,我不能将类中的任何变量改为除static
之外的任何变量。这让我想到了我的问题:为什么我不能编辑该类中的变量而不是静态的?为什么删除static
会破坏它?
答案 0 :(得分:2)
“静态”存在于类的范围内。非静态存在于对象的范围内(类的实例)。如果您只是从现有类中删除“static”,那么对self::referenceId
的所有引用都将被破坏。您需要使用$this->referenceId
替换所有这些内容。你确实理解'self'是指类,'this'是指对象?