2012-11-12 157 views
0

更新 按照專家的指導下,我已經修改了代碼是這樣的:OOP風格編碼

<?php 
//Class Validation 
class transaction_validate{ 

private $val_id; 
    function __construct($id) { 
     $this->val_id = $id; 
    } 

public function status(){ 
    //Call our server and decode json value 
    $data = $this->get_data($this->val_id); 
    $obj = json_decode($data); 

    return $obj->status; 
} 

public function amount(){ 
    //Call our server and decode json value 
    $data = $this->get_data($this->val_id); 
    $obj = json_decode($data); 

    return $obj->amount; 
} 


//Create a function for fetching data 
private function get_data($sid){ 
    $url = 'https://domain.com/verify/process.php?trx='.$sid; 
    $ch = curl_init(); 
    $timeout = 5; 
    curl_setopt($ch,CURLOPT_URL,$url); 
    curl_setopt($ch,CURLOPT_RETURNTRANSFER,1); 
    curl_setopt($ch,CURLOPT_CONNECTTIMEOUT,$timeout); 
    $data = curl_exec($ch); 
    curl_close($ch); 
    return $data; 
} 
} 

$validate = new transaction_validate(); 
$validate->val_id = '5201211120944'; 
echo $validate->amount(); 
echo '<br>'; 
echo $validate->status(); 

和輸出是

Warning: Missing argument 1 for transaction_validate::__construct(),

Fatal error: Cannot access private property transaction_validate::$val_id

糊塗了!

============================前一題================ ======================

我剛學OOP風格的PHP代碼。試圖編寫一個個人使用的腳本,這似乎是錯誤的。代碼是:

<?php 
//Class Validation 
class transaction_validate{ 

    var $val_id; 

    public function status(){ 
     //Call our server and decore json value 
     $data = get_data(); 
     $obj = json_decode($data); 

     return $obj->status; 
    } 

    public function amount(){ 
     //Call our server and decore json value 
     $data = get_data(); 
     $obj = json_decode($data); 

     return $obj->amount; 
    } 


    //Create a function for featching data 
    private function get_data($val_id){ 
     $url = 'https://domain.com/verify/process.php?trx='.$val_id; 
     $ch = curl_init(); 
     $timeout = 5; 
     curl_setopt($ch,CURLOPT_URL,$url); 
     curl_setopt($ch,CURLOPT_RETURNTRANSFER,1); 
     curl_setopt($ch,CURLOPT_CONNECTTIMEOUT,$timeout); 
     $data = curl_exec($ch); 
     curl_close($ch); 
     return $data; 
    } 
} 

$validate = new transaction_validate('5201211120944'); 
echo $validate->amount(); 
echo '<br>'; 
echo $validate->status(); 

和輸出是

Fatal error: Call to undefined function get_data() in /home/userdo/public_html/class.php on line 17

我需要認識到自己做錯了什麼我做到了。

+1

短篇小說被調用(還有更多,你可以在這裏做...):你應該添加一個構造函數($ val_id沒有被設置爲一個對象成員''get_data()'應該是'$ this-> get_data()' –

+0

感謝Matt的回覆。但構造函數的哪個部分?通過cURL獲取數據? – PHPLearner

+0

史蒂夫的答案有它。 :) –

回答

5

你需要告訴PHP函數是在類方面:

$this->get_data() 

正如在評論中提到,你應該添加一個構造函數來設置要傳遞的ID ...

class transaction_validate{ 

    private $val_id; 

    function __construct($id) { 
     $this->val_id = $id; 
    } 

    //... 

另外,如果你正在寫OOP,驗證可能屬於上代表一個事務,而不是在驗證助手類域實體。

+0

我已經更新了這些問題。你可以看一下嗎? – PHPLearner

+0

@PHPLearner我認爲你在我的答案中遺漏了'__construct'函數 - 這就是把id放到私有變量中。一旦你完成了,你需要在任何你想使用id的地方將'$ val_id'改成'$ this-> val_id'。 – Fenton

+0

我再次更新了這個問題,我試過了,但失敗了。你能檢查並幫我糾正嗎? – PHPLearner

1

這是因爲get_data()沒有在全球範圍內定義,但在transaction_validate類(順便說一下,我建議將其更改爲TransactionValidate;這是OOP命名約定之一)。

調用功能(OOP中 - 方法),您需要使用可變$this,基本上指向類的當前實例(在這種情況下 - 的transaction_validate實例

因此,代碼看起來應該是這樣的:

$data = $this->get_data(); 
+0

好的,謝謝。 – PHPLearner

1

要調用中必須使用的類實例即類的對象,其中函數的定義被調用的類中定義的函數

在上面的例子GET_DATA是私人˚F在類中定義,並根據面向對象的私有成員的數據隱藏的原則油膏是相同的類只 它們被隱藏在類的外部中訪問意味着私有成員不能在類定義外部調用。

因此,將在以下方式

<?php 

    //Class Validation 
    class transaction_validate{ 

var $val_id; 

public function status(){ 
    //Call our server and decore json value 
    $data =$this->get_data(); 
    $obj = json_decode($data); 

    return $obj->status; 
} 

public function amount(){ 
    //Call our server and decore json value 
    $data = $this0get_data(); 
    $obj = json_decode($data); 

    return $obj->amount; 
} 


//Create a function for featching data 
private function get_data($val_id){ 
    $url = 'https://domain.com/verify/process.php?trx='.$val_id; 
    $ch = curl_init(); 
    $timeout = 5; 
    curl_setopt($ch,CURLOPT_URL,$url); 
    curl_setopt($ch,CURLOPT_RETURNTRANSFER,1); 
    curl_setopt($ch,CURLOPT_CONNECTTIMEOUT,$timeout); 
    $data = curl_exec($ch); 
    curl_close($ch); 
    return $data; 
} 
} 

     $validate = new transaction_validate('5201211120944'); 
     echo $validate->amount(); 
      echo '<br>'; 
     echo $validate->status(); 
+0

'警告:對於transaction_validate :: get_data()'輸出缺少參數1是這樣的,如果我使用'$ data = $ this-> get_data($ val_id);'輸出是完全空的。 – PHPLearner