为什么类中的变量可能需要是静态的?

时间:2014-09-30 18:20:25

标签: php class oop static

我正在尝试调整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会破坏它?

1 个答案:

答案 0 :(得分:2)

“静态”存在于类的范围内。非静态存在于对象的范围内(类的实例)。如果您只是从现有类中删除“static”,那么对self::referenceId的所有引用都将被破坏。您需要使用$this->referenceId替换所有这些内容。你确实理解'self'是指类,'this'是指对象?