0

DeliveriesからJobinfoクラスにアクセスする際に問題が発生しました。問題は、子クラスからgetQtyの値を取得できる必要があり、親のプロパティを使用してqty_shipメソッドを取得できる必要があることです。これどうやってするの?うまくいかないようで、これについてはかなり混乱しています...親->子と子->親のメソッドを動的に使用できるようにしたいと思います。

class jobInfo
{
    public $JOB_ID;
    private $deliveries; // DELIVERIES CLASS

    function __construct($job_id)
    {

        $this->JOB_ID=$job_id;
        $this->deliveries = new Deliveries();

    }
    public function getQty()
    {
         return $this->query_s('job_sheet','*', 'job_id',$this->JOB_ID, 1, 'qty');
         //returns a quantity from query method
    }

}


class Deliveries  extends jobInfo
{

    function __construct(){}

    public function qty_ship()
    {
        $qty = 0;
        $SQL = mysql_query("SELECT * FROM deliveries WHERE jID='".parent::JOB_ID."'") or die(mysql_error());

        $rows = mysql_num_rows($SQL);
        if($rows>0)
        {
            while($data = mysql_fetch_array($SQL))
            {
                $qty += $data['qty_shipped'];
            }
        }
        return $qty;
     }

     public function getTotalBO()
     {
         $qty =  parent::getQty();
         $totalship =  $this->qty_ship();

         $x = $qty-$totalship;
         return $x; 
     }
 }

$A = new Jobinfo(15);
4

2 に答える 2

1

必要ですが$this->getQty()$this->JOB_ID完全を期すために、次のことを考慮してください。

  1. 空のno-parmコンストラクターを削除します。これは、ジョブIDを使用して親コンストラクターを呼び出さない限り、クラスのインスタンス化に実際に使用できないためです。これは、ジョブIDが外部で定義されていることを期待しているため実行できません。

  2. JOB_IDを作成しprotectedます。より良いカプセル化のために、代わりにそれを作りprivate、getJobId()メソッドを提供するかもしれません。

  3. 一貫したクラス命名の作業-jobInfo小文字でDeliveries始まり、大文字で始まります。

  4. 一貫性のある関数の命名に取り組んでいます-アンダースコアで区切られた関数とキャメルケースの関数が混在しています。

  5. 一貫した間隔での作業-韻や理由をあまり使わずに、1文字、2文字、0文字の間隔を全体に混ぜます。

OOPと幸運へようこそ!

于 2012-11-27T06:25:47.560 に答える
0

そのクラスから拡張する場合は、を使用する必要があります

$this->getQty();

$ thisは、すべてのパブリック変数と保護された変数およびメソッドを持つ親をすでに含んでいる現在のオブジェクトを返します。

静的クラスを呼び出すときは、::のみを使用する必要があります

例えば ​​:

jobInfo::getQty();

命名規則も確認することをお勧めします。

http://framework.zend.com/manual/1.12/en/coding-standard.naming-conventions.html

于 2012-11-27T04:52:11.073 に答える