调用函数有时不起作用

Posted

技术标签:

【中文标题】调用函数有时不起作用【英文标题】:Calling to a function doesn't work at times 【发布时间】:2017-08-15 22:17:29 【问题描述】:

在我目前正在进行的一个项目中,我想从类中的函数中获取数据。因此我从我的主索引文件中调用该函数。但是在我最初想拨打电话的地方,我收到以下错误:

致命错误:未捕获错误:调用成员函数 searchKlant() 在 N:\xampp\htdocs\Sylvia project\index.php:66 堆栈跟踪中的数组上:

0 main 在第 66 行的 N:\xampp\htdocs\Sylvia project\index.php 中抛出

但是,如果我使用同一行代码:

$klantfor = $klant->searchKlant($_GET['k']);

在同一代码的不同位置,我确实得到了所需的结果。 如果我调用相同的函数但这次在不同的类中它确实有效,是什么让它变得更有趣。

如果有人能帮助我解决问题,我将不胜感激。 提前谢谢你

主页代码:

<?php
spl_autoload_register(function ($class_name) 
    include 'custom/' . $class_name . '.class.php';
);

$klant = new Klant;
$invoice = new Invoice;

if($_SERVER['REQUEST_METHOD'] == 'POST' && isset($_POST['form']))
    if($_POST['form']=="klant") 
       $klant->addKlant($_POST);
     else if($_POST['form']=="invoice")
       $invoice->addInvoice($_POST);
    


$allklanten = $klant->getKlanten();
$allinvoice = $invoice->getInvoice();


?>
<!DOCTYPE html>
<html lang="en">
<head>
    <title></title>
    <meta charset="UTF-8">
</head>
<body>
    <?php include("components/header.php") ?>

    <div class="row">

        <div class="col-md-2">
            <ul class="col-sm-4 list-unstyled">
                <?php
                    foreach($allklanten as $klant)
                        echo "<li><a href='?page=0&k=" . $klant['kID'] . "'>" . $klant['kVoornaam'] . " " . $klant['kAchter'] . "</a></li><br>";
                    
                ?>
            </ul>
        </div>

        <?php
            if(isset($_GET['page'])) 
                if ($_GET['page'] == 2) 
                    include("pages/klantadd.php");
                 else if ($_GET['page'] == 3) 
                    include("pages/invoiceadd.php");
                
            
        ?>

        <div class="col-md-8">
            <?php
                if(isset($_GET['k']))

                    $klantfor = $klant->searchKlant($_GET['k']);
                    $invoicefor = $invoice->searchInvoice($_GET['k']);

                    foreach ($klantfor as $klant)
                    echo "<h3>" . $klant['kVoornaam'] . " " . $klant['kAchter'] . "</h3>";

                    echo "<table class=\"table table-hover\">
                            <thead>
                              <tr>
                                <th>ID</th>
                                <th>Datum</th>
                                <th>test.class</th>
                              </tr>
                            </thead>
                            <tbody>
                          ";

                    foreach($invoicefor as $invoice)
                        echo "<tr>";
                        echo "<td>" . $invoice['iID'] . "</td>";
                        echo "<td>" . $invoice['iDate'] . "</td>";
                        echo "</tr>";
                    

                    echo "</tbody></table>";
                
            ?>
        </div>

    </div>
</body>

以及相关功能:

public function searchKlant($target)
        $db = new Database();
        $db = $db->getConn();

        $statement = $db->prepare("SELECT * FROM klant WHERE kID = ?");
        $statement->bind_param("i",$target);
        $statement->execute();
        $result = $statement->get_result();
        while ($row = $result->fetch_assoc()) 
            $klant[] = $row;
        
        $statement->close();
        $db->close();

        return $klant;
    

【问题讨论】:

因为你在这里覆盖了$klantforeach($allklanten as $klant) 也覆盖foreach ($klantfor as $klant) 【参考方案1】:

您在此处覆盖 Klant 类的实例 $klant

foreach($allklanten as $klant) ....

所以把它改成别的东西($klantItem 左右)。

看这个简单的例子:

<?php

$array = Array(1,2,3);

$v="a class";
foreach($array as $v) 
    echo $v;


echo "outside: ".$v;
// output: 'outside: 3' - so "a class" is overwritten.

【讨论】:

老实说,我不得不检查自己是否 $klant in foreach 变得“全局” - 但由于控制结构不是单独的范围 - 它确实如此。

以上是关于调用函数有时不起作用的主要内容,如果未能解决你的问题,请参考以下文章

为啥从函数调用分配给属性 innerHTML 不起作用?

为啥我的函数在调用时不起作用? [关闭]

cURL 有时不起作用并给出空结果

从 AppDelegate 调用委托函数不起作用

从彼此内部调用函数不起作用

调用函数时异步等待不起作用