0

コードの実行中にエラーが発生しました。非オブジェクトでメンバー関数 getBallparkDetailsS​​tartDate() を呼び出すと表示されます。

if($projectStatusId == ProjectStatusKeys::BALLPARK_ACTIVE) {
            $ballpark = $this->ballparkDetailsHandler->getBallparkDetailsByProjectId($projectId);               
            $projectDetails["startdate"] = $ballpark->getBallparkDetailsStartDate();
            $projectDetails["enddate"] = $ballpark->getBallparkDetailsEndDate();
            $projectDetails["projectid"] = $projectId;
            $projectDetails["name"] = $ballpark->getBallparkDetailsBookingRef();
            $projectDetails["status"] = ProjectStatusKeys::BALLPARK_ACTIVE; 
        }

次の行でエラーが発生しました: $projectDetails["startdate"] = $ballpark->getBallparkDetailsS​​tartDate();

ここに私の他のコードがあります:

public function __construct($ballparkDetailsId, $project, 
        $ballparkDetailsBookingRef, 
        $ballparkDetailsStartDate, $ballparkDetailsEndDate, 
        $ballparkDetailsExpiryDate, $ballparkDetailsDescription, 
        $ballparkDetailsNotes) {
    $this->ballparkDetailsId = $ballparkDetailsId;
    $this->project = $project;
    $this->ballparkDetailsBookingRef = $ballparkDetailsBookingRef;
    $this->ballparkDetailsStartDate = $ballparkDetailsStartDate;
    $this->ballparkDetailsEndDate = $ballparkDetailsEndDate;
    $this->ballparkDetailsExpiryDate = $ballparkDetailsExpiryDate;
    $this->ballparkDetailsDescription = $ballparkDetailsDescription;
    $this->ballparkDetailsNotes = $ballparkDetailsNotes;
}

public function getBallparkDetailsId() {
    return $this->ballparkDetailsId;
}

public function getProject() {
    return $this->project;
}

public function getBankName() {
    return $this->getProject()->getBankName();
}

public function getBankRef() {
    return $this->getProject()->getBankRef();
}

public function getRegionName() {
    return $this->getProject()->getRegionName();
}

public function getProjectStatusName() {
    return $this->getProject()->getProjectStatusName();
}

public function getBallparkDetailsBookingRef() {
    return $this->ballparkDetailsBookingRef;
}

public function getBallparkDetailsStartDate() {
    return $this->ballparkDetailsStartDate;
}

public function getBallparkDetailsEndDate() {
    return $this->ballparkDetailsEndDate;
}

public function getBallparkDetailsExpiryDate() {
    return $this->ballparkDetailsExpiryDate;
}

public function getBallparkDetailsDescription() {
    return $this->ballparkDetailsDescription;
}

public function getBallparkDetailsNotes() {
    return $this->ballparkDetailsNotes;
}

public function getProjectId() {
    return $this->getProject()->getProjectId();
}

public function getProjectStatusId() {
    return $this->getProject()->getProjectStatusId();
}

}
?>

これを最後に確認したときは、うまくいきました。しかし、これの何が問題なのかわかりませんか?エラーを見つけるのを手伝ってください。ありがとう。

4

2 に答える 2

1

どうやら

$ballpark = $this->ballparkDetailsHandler->getBallparkDetailsByProjectId($projectId);

「球場」をまったく返していません。おそらく、エラー、または空の配列のようなものを返しています。

エラーが発生した行の直前でvar_dump()'を実行してみて、内容を確認してください (おそらく、、または同様に大げさではありません。$ballparkFalseNULLarray()

ballparkDetailsByProjectId()次に、ファイル内の関数を調べBallparkDetailsHandler.phpます。推測では、無効な (つまり、存在しない、削除されたなど) を渡している可能性があります$projectId

次に、エラー チェックを使用してコードを書き直すことができます。

if($projectStatusId == ProjectStatusKeys::BALLPARK_ACTIVE) {
        $ballpark = $this->ballparkDetailsHandler->getBallparkDetailsByProjectId($projectId);
        if (!is_object($ballpark))
            trigger_error("Error: bad project ID: '$projectId': $ballpark",
                E_USER_ERROR);

        $projectDetails["startdate"] = $ballpark->getBallparkDetailsStartDate();
        $projectDetails["enddate"] = $ballpark->getBallparkDetailsEndDate();
        $projectDetails["projectid"] = $projectId;
        $projectDetails["name"] = $ballpark->getBallparkDetailsBookingRef();
        $projectDetails["status"] = ProjectStatusKeys::BALLPARK_ACTIVE; 
    }

次に、BallparkDetailsHandler.phpファイルで次のコードを変更できます。

// Prepare query or die
if (!($stmt = $this->mysqli->prepare($query))
    return "Error in PREPARE: $query";

$stmt->bind_param("i", $projectId);
$stmt->execute();
$stmt->store_result();
$stmt->bind_result($ballparkDetailsBookingRef, $bankRef, $regionName,
     $projectStatusId, $projectStatusName,  $ballparkDetailsDescription,
     $ballparkDetailsNotes, $ballparkDetailsStartDate, $ballparkDetailsEndDate,
     $ballparkDetailsExpiryDate);
$stmt->fetch();

// If no data, then die
if(!$stmt->num_rows)
    return "No data in DB for projectID '$projectId': $query";

// Should be clear sailing from here on. Actually I ought to check
// whether all these new() here do return anything sensible, or not

$bank = new Bank("", "", $bankRef, "");
$region = new Region("", $regionName, "");
$projectStatus = new ProjectStatus($projectStatusId, $projectStatusName);
$project = new Project($projectId, $bank, $region, $projectStatus);

return new BallparkDetails("", $project,
    $ballparkDetailsBookingRef, $ballparkDetailsStartDate, 
    $ballparkDetailsEndDate, $ballparkDetailsExpiryDate, 
    $ballparkDetailsDescription, $ballparkDetailsNotes);
于 2012-10-16T11:36:27.507 に答える
0

$ballparkエラーのある行にあると思われるオブジェクトが含まれていないことは明らかです。実際、オブジェクトがまったく含まれていないことは明らかです。

これは、前の行 ( を設定する$ballpark) が正しく機能していないことを意味します。オブジェクトではない値を返しているように見えます。

その値が何であるかはわかりません。 であるnull可能性もあれば、整数、文字列、配列などである可能性もあります。しかし、それが何であれ、それは大まかなオブジェクトではありません。

getBallparkDetailsByProjectId()この問題の原因を見つける方法を確認することをお勧めします。

于 2012-10-16T11:39:02.067 に答える