【问题标题】:PHP Undefined variable/call do a member function on a non-objectPHP未定义变量/调用对非对象执行成员函数
【发布时间】:2014-01-12 00:09:31
【问题描述】:

系统在最后一个 if 上给我一个错误。 $nomeportefolio 上的未定义变量。在非对象上调用成员函数 ()addideasportefolio。 如果我在更改函数变量之前将这两行移到 if 中,它可以工作,但我需要在最后一个 if 上使用它!有人可以帮忙吗?

    <?php

include ("Ideia.php");

$handle = @fopen("C:\Users\Bia\Desktop\Projecto ES/input.txt", "r");

if ($handle) {
    $booleanuser = FALSE;
    while (!feof($handle)) {
        $buffer = fgets($handle, 4096);
        $partial = substr($buffer, 0, 4);
        $nomeuser;
        $iduser;
        $saldo = substr($buffer, 0, 5);
        $portefolio = substr($buffer, 0, 9);
        $nomeportefolio;


        if ($partial == "user") {
            $booleanuser = TRUE;
            $nomeuser=substr($buffer, 0, 5);
            $iduser=substr($buffer, 4, 1);
            $nomeuser = new User($iduser);
        }

        if ($booleanuser == FALSE) {
            if ($partial == "idea") {
                $nomeideia=substr($buffer, 0, 5);
                $idideia=substr($buffer, 4, 1);
                $nomeideia = new Ideia($idideia);
            }
        }

        if ($saldo == "Saldo"){
            $nomeuser->addsaldo(substr($buffer, 7));
            echo $nomeuser->greetuser();    
        }

        if ($portefolio == "Portfolio"){
            $nomeportefolio="portefolio".$iduser;
            $nomeportefolio = new Portefolio($iduser,$iduser);

        }
        if ($partial == "idea"){
            $nomeportefolio->addideiasportefolio($iduser,$iduser);
            //função que mostra os ids das ideias no portefólio
            echo $nomeportefolio->mostraportefolio();
        }


    }
    fclose($handle);
}

【问题讨论】:

  • $nomeportefolio="portefolio".$iduser; 有什么意义,因为你覆盖了它?

标签: php function class undefined


【解决方案1】:

错误Call to a member function on a non-object 表示您正在尝试对不是对象的变量使用函数。

在这种情况下,$nomeportefolio-&gt;addideiasportefolio($iduser,$iduser);

但是为什么会这样呢?很简单,您只在代码的以下部分将$nomeportefolio 设置为Portefolio 类的实例:

if ($portefolio == "Portfolio"){
        $nomeportefolio="portefolio".$iduser;
        $nomeportefolio = new Portefolio($iduser,$iduser);

    }

但是如果$portefolio 等于“Portfolio”但$partial 等于“idea” 呢? p>

简单 :P 它试图在$nomeportefolio 上调用函数-&gt;addideiasportefolio(),这是一个非对象,因为if($portefolio == "portfolio") 没有执行;)

【讨论】:

    【解决方案2】:

    您在一段时间内的 if 语句中设置 $nomeportefolio。正弦 if ($partial == "idea") 条件 *calls $nomeportefolio 但没有设置它,你冒着在循环中某处的风险 $portefolio !== "Portfolio" 尚未设置它。你需要做的是将“idea”检查放在投资组合中的 if 语句中:

        if ($portefolio == "Portfolio"){
            $nomeportefolio="portefolio".$iduser;
            $nomeportefolio = new Portefolio($iduser,$iduser);
    
            if ($partial == "idea"){
                $nomeportefolio->addideiasportefolio($iduser,$iduser);
                //função que mostra os ids das ideias no portefólio
                echo $nomeportefolio->mostraportefolio();
            }
        }
    

    【讨论】:

      猜你喜欢
      • 2014-03-07
      • 2014-06-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-01-02
      • 2016-01-01
      相关资源
      最近更新 更多