0

更新専門家の指示に従って、コードを次のように変更しました。

<?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();

そして、出力は

警告: transaction_validate::__construct() の引数 1 がありません。

致命的なエラー: プライベート プロパティ 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();

そして、出力は

致命的なエラー: 17 行目の /home/userdo/public_html/class.php の未定義関数 get_data() の呼び出し

私は自分が何をしたかを認識する必要があります。

4

3 に答える 3

5

関数がクラス コンテキストにあることを PHP に伝える必要があります。

$this->get_data()

コメントで述べたように、コンストラクターを追加して、渡す ID を設定する必要があります...

class transaction_validate{

    private $val_id;

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

    //...

また、OOP を作成している場合、検証はおそらく検証ヘルパー クラスではなく、トランザクションを表すドメイン エンティティに属します。

于 2012-11-12T17:31:48.847 に答える
1

クラスで定義された関数を呼び出すには、クラスインスタンス、つまり関数が定義されているクラスのオブジェクトを使用して呼び出す必要があります。

上記の例では、get_dataはクラスで定義されたプライベート関数であり、データの原則に従って、OOPプライベートメンバーの非表示は同じクラス内でのみアクセス可能です。これらはクラスの外部で非表示になっているため、クラス定義の外部でプライベートメンバーを呼び出すことはできません。

したがって、次の方法で呼び出されます

<?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();
于 2012-11-12T17:59:41.527 に答える
1

これは、get_data()がグローバル スコープではなくtransaction_validateクラスで定義されているためです (ちなみに、 に変更することをお勧めしTransactionValidateます。これは OOP 命名規則の 1 つです)。

$this関数 (OOP – メソッド) を呼び出すには、基本的にクラスの現在のインスタンス (この場合 – のインスタンス) を指す変数を使用する必要がありますtransaction_validate

したがって、コードは次のようになります。

$data = $this->get_data();
于 2012-11-12T17:39:11.280 に答える