2016-11-24 83 views
1

我知道有一些關於它的線程,但似乎沒有任何工作......我試圖在PHP中創建類似全局類變量的東西,因此理論上我想要類似這樣的東西:PHP類變量

(PseudoCode後面):

class GlobalVarClass{ 

globalVar $price; 

function doSomethingWithThePrice(){ 

    //get some Values, etc.. 
    $this->price = $xyz; 

} 

function needThePriceNow(){ 
    //this is where the price is needed now, so something like 
    echo $this->price; 
} 

} 

我該怎麼做?順便說一句:

我使用Laravel順便說一句,我不能設置在構造函數中這個值,因爲我有它尚不可用......,如果這使事情更容易...

編輯: 確切的說,這是我的代碼:

class VoucherController extends Controller 
{ 
    private $_apiContext; 

    protected $voucherValue; 

    public function __construct() 
    { 
     $this->_apiContext = PayPal::ApiContext(
      config('services.paypal.client_id'), 
      config('services.paypal.secret')); 

     $this->_apiContext->setConfig(array(
      'mode' => 'sandbox', 
      'service.EndPoint' => 'https://api.sandbox.paypal.com', 
      'http.ConnectionTimeOut' => 30, 
      'log.LogEnabled' => true, 
      'log.FileName' => storage_path('logs/paypal.log'), 
      'log.LogLevel' => 'FINE' 
     )); 

    } 

    public function index(){ 
     return view('voucher.createVoucher'); 
    } 

    public function payVoucher(Request $request){ 
     $userInfo = \App\User::where('id','=',\Auth::user()->id) 
      ->first(); 

     if($userInfo->street == ""){ 
      $request->session()->flash('alert-info', 'Vor der ersten Bestellung müssen Sie erst Ihre Daten vervollständigen'); 
      return redirect('/editData'); 
     } 

     $itemList = PayPal::itemList(); 

     $payPalItem = PayPal::item(); 
     $payPalItem->setName('Gutschein')->setDescription('Gutschein für Shopping Portal')->setCurrency('EUR')->setQuantity(1)->setPrice($request->input('voucherValue')); 

     $total = $request->input('voucherValue'); 

     $this->voucherValue = $total; 

     $itemList->addItem($payPalItem); 

     $payer = PayPal::Payer(); 
     $payer->setPaymentMethod('paypal'); 

     $details = PayPal::details(); 
     $details->setShipping("0") 
      ->setSubtotal($total); 

     $amount = PayPal:: Amount(); 
     $amount->setCurrency('EUR'); 
     $amount->setTotal(($total)); 
     $amount->setDetails($details); 

     $transaction = PayPal::Transaction(); 
     $transaction->setAmount($amount); 
     $transaction->setItemList($itemList); 
     $transaction->setDescription('Ihr Gutschein'); 

     $redirectUrls = PayPal:: RedirectUrls(); 
     $redirectUrls->setReturnUrl(action('[email protected]')); 
     $redirectUrls->setCancelUrl(action('[email protected]')); 

     $payment = PayPal::Payment(); 
     $payment->setIntent('sale'); 
     $payment->setPayer($payer); 
     $payment->setRedirectUrls($redirectUrls); 
     $payment->setTransactions(array($transaction)); 

     $response = $payment->create($this->_apiContext); 

     $redirectUrl = $response->links[1]->href; 

     return Redirect::to($redirectUrl); 
    } 


    public function getDone(Request $request) 
    { 
     $id = $request->get('paymentId'); 
     $token = $request->get('token'); 
     $payer_id = $request->get('PayerID'); 

     $payment = PayPal::getById($id, $this->_apiContext); 

     $paymentExecution = PayPal::PaymentExecution(); 

     $paymentExecution->setPayerId($payer_id); 
     $executePayment = $payment->execute($paymentExecution, $this->_apiContext); 

     // Clear the shopping cart, write to database, send notifications, etc. 

     // Thank the user for the purchase 

     //Gutscheincode generieren, in DB eintragen, und per Mail verschicken 

     $voucherCode = substr(base_convert(sha1(uniqid(mt_rand())), 16, 36), 0, 12); 
     $voucher = new Voucher; 
     $voucher->voucherValue = $this->voucherValue; 
     $voucher->voucherCode = $voucherCode; 
     $voucher->save(); 

     return view('voucher.buyDone', ['voucherCode' => $voucherCode, 'payment' => $payment]); 
    } 

所以我做了支付寶付款。在函數payVoucher中,我從request獲得了憑證值(這是應該可以在其他函數中訪問的變量),然後在函數getDone中,我需要訪問它才能將其輸入到數據庫中。我怎樣才能做到這一點?

+0

爲downvoted的一個:感謝不告訴我爲什麼至少;) 問題是,變量似乎一直保持undefined,這是一個對象var,所以我嘗試使用其中之一,但它是未定義的當我嘗試在第二個函數 – nameless

+0

@jeroen中使用它時,我編輯了我的問題以使用我的真實代碼,只是認爲它可能不會造成混淆,因爲「PayPal」不是問題所在。 – nameless

+0

這是不是相同請求,還是在例如重定向之後?你的代碼似乎建議重定向;在這種情況下,您需要更多的持久性存儲,如會話或數據庫。 – jeroen

回答

1

基於您的評論,第二種方法是重定向後調用。這是一個新的請求,並且當腳本完成時,您在腳本中設置的所有變量均不再存在,則您設置的屬性的原始對象將不再存在。

有幾種方法可以將值傳遞給新請求,如url中的查詢變量,會話變量或數據庫存儲。

使用會話或一些其他類型的服務器端存儲保留在服務器上的值,這就是我會建議:

public function payVoucher(Request $request){ 
    ... 
    $_SESSION['PayPal']['voucherValue'] = $total; 
    ... 
} 


public function getDone(Request $request) 
{ 
    ... 
    $voucher->voucherValue = $_SESSION['PayPal']['voucherValue']; 
    // You need to delete it? 
    unset($_SESSION['PayPal']['voucherValue']); 
    ... 
} 

請注意,我假設一個會話已在已經啓動腳本的頂部。

+1

這個工程!謝謝...這個東西,在重定向之後創建的新對象是我忘記的東西,這就是爲什麼它不起作用,然後......謝謝 – nameless

0

嘗試這樣

protected $price; 
+0

不起作用,這就是問題......它保持undefined ... – nameless

+0

確定..讓它公開並嘗試 – Komal

+0

同樣的問題...我會用真正的完整代碼編輯我的答案 – nameless

0
class GlobalVarClass{ 

public $price; 

public function __construct(){ 
    $this->price = 123; 
} 


function needThePriceNow(){ 
    //this is where the price is needed now, so something like 
    echo $this->price; //This will give 123; 
} 

} 
+0

正如我在問題中寫的那樣,值不能在contstructor中訪問,所以我無法在構造函數 – nameless

+0

中指定您可以省略構造函數。 '公共$價格;'應該工作時,你稍後調用它分配值 – Michel

+0

使用$ this-> price = 0在構造函數中刪除錯誤,但仍然,新值不存儲 – nameless