Я пытаюсь адаптировать PHP-библиотеку Amazon Simple Pay Standard для динамического использования. Это было написано, чтобы быть своего рода фабрикой кнопок. Основной раздел кода, который я нашел нужным отредактировать, — это первый класс, в котором объявлено много переменных. Однако, как вы можете видеть, они все 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";
}
}
}
Пытаясь изменить это, я очень быстро понял, что не могу просто бросить внешнюю переменную в класс, ала $referenceId = $uid . time();
Тем не менее, я нашел пару обходных путей для этого здесь, на SO. Но попытка их использования выявила проблему, а именно то, что я не могу изменить ни одну переменную в классе на что-либо, кроме static
, И это подводит меня к моему вопросу: С какой стати я не могу редактировать переменные в этом классе, чтобы они не были статичными? Почему удаление static
сломать это?
«статический» существует в области видимости класса. В области объекта существует нестатический объект (экземпляр класса). Если вы просто удалите «static» из существующего класса, все ссылки на него, такие как self::referenceId
будет сломан. Вам нужно будет заменить их все $this->referenceId
, Вы понимаете, что «я» относится к классу, а «это» относится к объекту?
Других решений пока нет …