2016-06-02 6 views
1

実際にデータベースからデータをフェッチした後、新しいオブジェクトを作成してこのオブジェクトを配列に挿入したいのですが、配列をチェックするとNULL値が表示されます ここは自分のコードです:PHPのオブジェクトに値を割り当てます

<?php 

$query = "sql query"; 
$filter_Result = mysqli_query($con, $query); 
$newOrders = Array(); 

while ($row = mysqli_fetch_array($filter_Result)) { 
    $order; 
    $orderId = $row['order_id']; //fetch row id 
    $temp = check_id($newOrders, $orderId); 

    if ($temp != null) { 
     $order = $temp; 
    } else { 
     echo " <br>"; 
     $order = new Order($row['order_id'], $row['status'], $row['created_Date']); 
     $newOrders[] = $order; 

    } 
    $item = new Item($row['status'], $row['quantity']); 
    $order->AddItem($item, null); 

} 
function check_id($newOrders, $orderId) { 
    $length = count($newOrders); 
    for ($i = 0; $i < $length; $i++) { 

     if ($newOrders[$i]->$orderId == $orderId) 
      return $newOrders[$i]; 
    } 
    return null; 
} 

foreach ($newOrders as $order) { 
} 

?> 
+0

$ order = new order($ row ['status_id']、$ row ['status']、$ row ['created_Date'])です。 –

+0

Sidenote、あなたのクラス変数はPHP5で 'var'で定義されるべきではありません。 'public'、 'private'、 'protected'のいずれかを使用して定義する必要があります。詳細:http://stackoverflow.com/questions/1206105/what-does-php-keyword-var-do – H2ONOCK

答えて

1

あなたは

var $order_Id; 

ご注文のクラスに変数を持っている。しかし、あなたは私がすべてのPHPエラーを回すことをお勧め

$this->orderId = $orderId; 

存在しない$注文IDに値を代入してみてください開発中。 PHPコードにこれを含めて、エラーが発生していないかどうかを確認することができます。肉眼ですべての小さなエラーを見るのは非常に難しいです:) PHPがあなたのためにやってみましょう。

ini_set('display_errors', 1); 
ini_set('display_startup_errors', 1); 
error_reporting(E_ALL); 

hereを報告し、エラーの詳細。

+0

編集後: $ this-> $ order_Id = $ order_Id; $ thisを間違って使用しているので、まだ問題は同じ –

+1

です。 $ this-> $ varは "変数$ varに保持されている名前で$ thisのフィールドにアクセスする"ことを意味します。これは空です。正解は$ this-> var – Adder

+0

はいアダーが正しいです。それを$ this-> order_Id = $ order_Idに置き換えます。 –

0

いくつかの小さな間違いがあります。 "this"を間違って使用し、 "orderId"に別の名前を付け、コンストラクタに間違った名前を付けます。コンストラクタ名は、 "Item"コンストラクタと同じ "Order"または "__construct"でなければなりません。

class Order { 
    /* Member variables */ 
    var $orderId; 
    var $status; 
    var $createdDate; 
    var $items = array(); 

    function Order($orderId, $status, $createdDate) 
    { 
     $this->orderId = $orderId; 
     $this->status = $status; 
     $this->createdDate = $createdDate; 
    } 
    function AddItem($itemId,$quantity)  
    { 
     $item = new Item($itemId,$quantity); 
     $items[] = $item; 
    } 

} 

$c = new Order(1, 'OK', 'today'); 
print_r($c); 
+0

はまだ問題 ....同じままで、手動で** __コンストラクタは、** rightway –

+0

ですコンストラクタ名に何が間違っていますか? –

-2

new_order.php

<?php 
     class Order { 
     /* Member variables */ 
     var $order_Id; 
     var $status; 
     var $createdDate; 
     var $items = array(); 

     function __Order($order_Id, $status, $createdDate) 
     { 
      $this->order_Id = $order_Id; 
      $this->status = $status; 
      $this->createdDate = $createdDate; 
     } 
     function AddItem($itemId,$quantity)  
     { 
      $item = new Item($itemId,$quantity); 
      $items[] = $item; 
     } 

    } 

    class Item { 
     var $productId; 
     var $productName; 
     var $quantity; 
     var $personalization; 

     function __Item($productId, $quantity) 
     { 
      $this->productId = $productId; 
      $this->productName = $productName; 
      $this->quantity = $quantity; 
      $this->personalization = $personalization; 
     } 
    } 
    ?> 
0

は、今私たちはコンストラクタを作成するための__construct()を使用する必要がPHPで解決策を見つけた.... だから、それを__constructの代わりにクラスを使用します詳細情報の名前は __construct() vs SameAsClassName() for constructor in PHP

関連する問題