خواندن متغیر از داخل کلاس
سلام.
می خواستم بدونم اگه بخوام مقدار یک متغیر که در یک تابع و در یک فایل دیگه هست رو بخونم باید چکار کنم؟
ببینید در فایل زیر، میخوام مقدار متغیر $authority را همونطور که اضافه کردم رو قرار بدم. این متغیر از تابع دیگری در داخل کلاس دیگر و در فایل 2 قرار دارد ، ممنون میشم بگین چگونه اینکارو بکنم.
فایل 1:
[PHP]<?php
class pec24 {
var $code, $title, $description, $enabled;
// class constructor
function pec24() {
global $order;
$this->code = 'pec24';
$this->title = MODULE_PAYMENT_PEC24_TEXT_TITLE;
$this->description = MODULE_PAYMENT_PEC24_TEXT_DESCRIPTION;
$this->sort_order = MODULE_PAYMENT_PEC24_SORT_ORDER;
$this->enabled = ((MODULE_PAYMENT_PEC24_STATUS == 'True') ? true : false);
if ((int)MODULE_PAYMENT_PEC24_ORDER_STATUS_ID > 0) {
$this->order_status = MODULE_PAYMENT_PEC24_ORDER_STATUS_ID;
}
$this->style_enabled = ((MODULE_PAYMENT_PEC24_STYLE_STATUS == 'True') ? true : false);
if (is_object($order)) $this->update_status();
$this->form_action_url = 'https://www.pec24.com/pecpaymentgateway/?au='.$authority;
}
...
[/PHP]
فایل 2:
[PHP]<?php
//define required variables
define("_INCLUDE_DIR", "includes/classes/lib/"); //Path of required file for include (with full slash)
define("MERCHANT_ID", MODULE_PAYMENT_PEC24_MID); //Merchant ID for settlement money.You must get one from Saman Bank Network
define("MERCHANT_PASSWORD", MODULE_PAYMENT_PEC24_MPASS); //Password of Merchant ID for return money to customer.
define("PEC24_TABLE_RESERVATION", TABLE_PEC24_RESERVATION); //Name of table in mysql database for store reservation data
define("PEC24_TABLE_ERECEIPT", TABLE_PEC24_ERECEIPT); //Name of table in mysql database for store electronic receipt data
define("PEC24_TABLE_RETURNLOG", TABLE_PEC24_RETURNLOG); //Name of table in mysql database for store all money return details
require_once(_INCLUDE_DIR."nusoap.php");
class pec24out {
var $amount = 0; //Amount of money for transaction
var $reservation = ''; //A security number for access user
var $merchantID = MERCHANT_ID; //Your Merchant ID of Saman bank
var $redirect = ''; //User redirect to this URL after compietion transaction
var $orderid; //ID of order for wist user and order after user redirect
var $error_ok = False;
var $errorstr = array();
var $error_save_handele = 0;
function pec24out($oid, $amo) {
if ($amo <= 0) {
$this->error_ok = True;
$this->errorstr[] = "Payment error: Amount cannot be eaqual to or less than zero. ";
$this->save_error();
} else {
$this->amount = $amo;
}
if ($oid <= 0) {
$this->error_ok = True;
$this->errorstr[] = "Payment error: You must enter a valid value for orderid of this payment.";
$this->save_error();
} else {
$this->orderid = $oid;
$this->orderid = $this->create_reservation();
}
}
function set_redirect($url) {
if (!eregi("^(http|https)+(:\/\/)+[a-z0-9_-]+\.+[a-z0-9_-]", $url)) {
$this->error_ok = True;
$this->errorstr[] = "Payment error: Invalid redirect URL.";
$this->save_error();
} else {
$this->redirect = $url;
}
}
function create() {
if(trim($this->merchantID) == '') {
$this->error_ok = True;
$this->errorstr[] = "Payment error: you must enter a mechant id for post to transaction server.";
}
if(trim($this->redirect) == '') {
$this->error_ok = True;
$this->errorstr[] = "Payment error: You must enter a redirect URL for redirect user to your site after compietion transaction";
}
if(intval($this->amount) <= 0) {
$this->error_ok = True;
$this->errorstr[] = "Payment error: Amount cannot be eaqual to or less than zero. ";
}
if(intval($this->orderid) <= 0) {
$this->error_ok = True;
$this->errorstr[] = "Payment error: You must enter a valid value for orderid of this payment.";
}
if($this->error_ok == True) {
$this->save_error();
return False;
}
$soapclient = new soapclient('https://www.pec24.com/pecpaymentgateway/EShopService.asmx?wsdl','wsdl');
if (!$err = $soapclient->getError())
$soap***** = $soapclient->get*****() ;
if ( (!$soapclient) OR ($err = $soapclient->getError()) ) {
$error .= $err . "--<br />" ;
echo $error ;
} else {
$this->orderid=generatePassword(5,false,false,true,false );
$params = array(
'pin' => $this->merchantID , // this is our PIN NUMBER
'amount' => intval($this->amount),
'orderId' => $this->orderid,
'callbackUrl' => $this->redirect,
'authority' => 0,
'status' => 1
);
$sendParams = array($params) ;
$res = $soapclient->call('PinPaymentRequest', $sendParams);
$authority = $res['authority'];
$status = $res['status'];
if ( ($authority) and ($status==0) ) {
$output .= tep_draw_hidden_field('au', $authority);
if(!@tep_db_query("INSERT INTO " .PEC24_TABLE_RESERVATION. " VALUES('','" .$this->orderid. "','" .$this->amount. "','" .$authority. "')")) {
$this->error_ok = True;
$this->errorstr[] = "MySQL error: you can't insert data to database.";
$this->save_error();
return False;
}
}
else {
if ($err=$soapclient->getError())
echo "ERROR = $err <br /> " ;
$output .= "OrderID" . $params[orderId] . "<br>***Status:". $status . "--Au:" . $authority ."--"."Couldn't Validate Payment with Parsian<br> " . $this->errorstr[1] ;
}
}
return $output;
}
function create_reservation() {
$this->reservation = generatePassword(10,false,false,true,false);
if(tep_db_query("SELECT * FROM " .PEC24_TABLE_RESERVATION)) {
while(True) {
$randreser = generatePassword(10,false,false,true,false);
if(!tep_db_num_rows(tep_db_query("SELECT id FROM " .PEC24_TABLE_RESERVATION. " WHERE res_number='$randreser'"))) {
break;
}
}
$this->reservation = $randreser;
return True;
} else {
$this->error_ok = True;
$this->errorstr[] = "MySQL error: reservation table not found in database.";
}
$this->save_error();
return False;
}
....
[/PHP]
در فایلهای فوق همراه با ایجاد شی جدید چون نام تابع و کلاس یکیه ، تابع هم اجرا میشه ، چطور میتونم یک شی از کلاس pec24out تعریف کنم که نیاز نباشه بهش آرگومان بدم ، چراکه با ایجاد شی جدید تابع pec24out نیز فراخوانی میشه.
ممنون