2012-11-12 4 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을 작성하는 경우 유효성 검증 도우미 클래스가 아닌 트랜잭션을 나타내는 도메인 엔티티에 유효성 검사가 속해있을 수 있습니다. get_data()가 글로벌 범위에서 정의되지 않고 transaction_validate 클래스에 있기 때문에

+0

질문을 업데이트했습니다. 좀 봐 주시겠습니까? – PHPLearner

+0

@PHPLearner 제 답변에서'__construct' 함수를 빠뜨린 것 같습니다. id를 가져 와서 private 변수에 넣습니다. 일단 그렇게하면 id를 사용하고자 할 때마다'$ val_id'를'$ this-> val_id'로 변경해야합니다. – Fenton

+0

질문을 다시 업데이트했지만 시도했지만 실패했습니다. 수표를 확인하고 교정하는데 도움을 줄 수 있습니까? – PHPLearner

1

이다 (그런데, 나는 TransactionValidate로 변경하는 것이 좋습니다 것, 이것이 OOP 명명 규칙 중 하나입니다).

(OOP에 - 방법) 함수를 호출하려면, 당신은 (이 경우 기본적으로 클래스의 현재 인스턴스를 가리키는 변수 $this를 사용합니다 -. 예를 transaction_validate

을 그래서 코드가 보일 것입니다 이 같은.

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

좋은 점, 고마워. – PHPLearner

1

는 함수가 정의 된 클래스의 객체, 즉 클래스 인스턴스를 사용하여 호출 할 필요가있는 클래스에 정의 된 함수를 호출하기

을 상기 예시 get_data으로하는 개인 F는 OOP 전용 멤버의 데이터 숨김 원칙에 따라 클래스에 정의 된 unact는 동일한 클래스에서만 액세스 가능합니다. 클래스 외부에 숨겨져 있으므로 클래스 정의 외부에서 private 멤버를 호출 할 수 없습니다.

그래서이 방법을

<?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

관련 문제